Bir soru üzerine ilgimi çektiği için hazırladım.
Accordion kontrolü üzerinde bildiğiniz üzere AccordionPane ismindeki paneller yer almaktadır. Bunlara tıkladığınızda ise kendileri açılmaktadır :)
Tıklamak yerine fare üzerine getirildiğinde AccordionPane'i açmak istiyor olabilirsiniz bu durumda yapmanız gereken :
1) sayfanıza aşağıdaki javascript'i eklemek :
function PanelAc(Numara){
var sonuc = $get("Accordion1").AccordionBehavior;
sonuc.set_SelectedIndex(Numara); }
Daha sonraki bölümde ise iş size kalmıştır, nerede nasıl çağıracağınız veya hangi event ile ilişkilendireceğiniz :
Benim yaptığım örnekte Northwind içerisindeki kategoriler ve ürünler ile ilgili bir yapı var. Kategori adeti kadar AccordionPane dynamic olarak ekleniyor sayfaya ve herbirinin içerisine ilgili kategori altındaki ürünler ekleniyor. Fare kategori isminin üzerine getirildiğinde ise seçilmiş gibi davranıp açılıyor :
void Doldur()
{
SqlConnection cn = new SqlConnection();
cn.ConnectionString = "server=.;database=Northwind;uid=***;pwd=***;multipleactiveresultsets=true;";
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandText = "Select * from Categories";
SqlCommand cmd2 = new SqlCommand();
cmd2.Connection = cn;
cmd2.CommandText = "Select * from Products where CategoryId=@Id";
cn.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
cmd2.Parameters.Clear();
cmd2.Parameters.AddWithValue("@Id", dr["CategoryId"]);
AccordionPane ap = new AccordionPane();
Label lbl = new Label
{
Text = dr["CategoryName"].ToString(),
ID = "lbl" + dr["CategoryId"]
};
lbl.Attributes.Add("onmouseover", "PanelAc(" + (int.Parse(dr["CategoryId"].ToString()) - 1) + ")");
ap.HeaderContainer.Controls.Add(lbl);
SqlDataReader dr2 = cmd2.ExecuteReader();
while (dr2.Read())
{
ap.ContentContainer.Controls.Add(new LinkButton { ID = "lb" + dr2["ProductId"], Text = dr2["ProductName"].ToString()+"<br/>" });
}
dr2.Close();Accordion1.Panes.Add(ap);
}
cn.Close();
}
Bu metot içerisinde dikkat edilmesi gereken en önemli nokta
lbl.Attributes.Add("onmouseover", "PanelAc(" + (int.Parse(dr["CategoryId"].ToString()) - 1) + ")");
satırıdır. Bu satırda fare label'ın üzerine geldiğinde Pane'in açılması sağlanıyor.
Hepinize iyi çalışmalar
bora.burgucugil@bilgeadam.com
Bilge Adam Bilgi Teknolojileri Akademisi
Bireysel Yazılım Geliştirme Eğitmeni - Beşiktaş