Arşiv Anasayfa ASP.NET Makaleleri
Sayfalar: 1
Menu Kontrolü ve Elemanların Veritabanından Alınması Gönderen: FetihlerFatihi Tarih: 01 November 2007 17:11:53
Delphi 2007 ve ASP.NET 2 ile birlikte gelen menu kontrolü ile çok kolay bir şekilde menü oluşturabilirsiniz. Şimdi yapacağımız menü aşağıdaki ekran görüntüsüne sahip olacaktır.



Kontrolü forma ekledikten sonra Orientation özelliğini Horizontal olarak değiştirirseniz, ekran görüntümüz aşağıdaki gibi olacaktır.



Menünün kayar menü olarak görünmesi yerine bir ağaç yapısı şeklinde görünmesini isterseniz, StaticDisplayLevels özelliği ile oynamalısınız. Bu özelliğe atayacağınız değer, menünün kaç daldan oluştuğu ile ilgilidir. Alt menünün alt menüsü olmaması sebebiyle, bu özelliğe 2 değerini atayabilirsiniz. Alt menünün alt menüsü olması halinde, bu değer 3 olmalıydı.



Menü Elemanlarını Veritabanı Tablosundan Almak
Kontrol hakkında kısa bilgiler verdikten sonra tekrar örneğimize dönelim. Aşağıdaki örnek için forma ekleyeceğiniz menü kontrolünün özelliklerini değiştirmeniz gerekmemektedir. Görsel özelliklerini Object Inspector’un Style kategorisindeki özelliklerle değiştirebileceğiniz gibi, Auto Format bölümünden hazır bir şablonda seçebilirsiniz.



Örneğinimizde menü elemanlarını veritabanında bulunan tablolardan çekeceğiz. Bunun için foreign key ile ilişkilendirilmiş 2 tablo kullanacağız. Örneğimizde alt menünün alt menüsü olsaydı, 3. bir tablo kullanmalıydık. Tabi oluşturduğum tablo yapısı bir kural olarak algılanmamalıdır. Siz farklı bir yapı da kullanabilirsiniz.

Ana Menüleri barındıran tablomuz aşağıdaki gibi olmalıdır.



Alt Menüleri barındıran tablomuz ise aşağıdaki gibi olmalıdır.



Görüldüğü üzere tablolarımız sadece 2 özelliği saklamaktadır, ancak aşağıdaki özellikler için yeni alanlar da ekleyebilirsiniz.



Elemanlara Ait Özellikler

Sayfamızın Load Olayı
Sayfamızın load olayına menü elemanlarını oluşturacak aşağıdaki kodları yazıyoruz. VTYS olarak MS SQL Server kullanılmıştır. Sizin seçiminiz farklı olabilir.

Kodlama dili (delphi)
var
 Ds: Dataset;
 Baglan: SqlConnection;
 SeciciAna: SqlDataAdapter;
 SeciciAlt: SqlDataAdapter;
 iliski: DataRelation;
 KayitAna, KayitAlt: DataRow;
 AnaMenu, AltMenu: MenuItem;
begin
 Baglan := SqlConnection.Create('integrated security=SSPI;data source=FATIH;' +
   'persist security info=False;initial catalog=testdb');
 Ds := DataSet.Create;
 SeciciAlt := SqlDataAdapter.Create('SELECT * FROM altmenu', Baglan);
 SeciciAna := SqlDataAdapter.Create('SELECT * FROM anamenu', Baglan);
 SeciciAna.Fill(Ds, 'anamenu');
 SeciciAlt.Fill(Ds, 'altmenu');
 if Baglan.State = ConnectionState.Open then
   Baglan.Close;
   //ilişkiyi kur
 Iliski := DataRelation.Create('iliski',
   Ds.Tables['anamenu'].Columns[0], Ds.Tables['altmenu'].Columns[1]);
 Ds.Relations.Add(Iliski);
 for KayitAna in Ds.Tables['anamenu'].Rows do
 begin
   AnaMenu := MenuItem.Create;
   AnaMenu.Text := KayitAna['menu'].ToString;
   AnaMenu.NavigateUrl := KayitAna['adres'].ToString;
   Menu1.Items.Add(AnaMenu);
   for KayitAlt in KayitAna.GetChildRows('iliski') do
   begin
     AltMenu := MenuItem.Create;
     AltMenu.Text := KayitAlt['menu'].ToString;
     AltMenu.NavigateUrl := KayitAlt['adres'].ToString;
     AnaMenu.ChildItems.Add(AltMenu);
   end;
 end;
end;

Öncelikle veritabanına bağlanılarak 2 tablodaki tüm veriler çekilmiş; veritabanı ile bağlantı kesildikten sonra, tablolar arasında foreign key ilişkilendirmesi yapılmıştır. İlk for in do... her kaydı tek tek KayitAna değişkenine aktarıp kullanılmasını sağlarken. 2. for in do.. ana Tabloya bağlı detay tablodaki kayıtları çekip "kayitAlt" değişkenine teker teker aktararak sıra ile kullanılmasını sağlamaktadır. Bir Ana Menü oluşturulduktan hemen sonra, ona bağlı Alt Menüler oluşturuluyor ve Ana Menü elemanı Menu kontrolüne atanmadan hemen önce, ona bağlı Alt Menü elemanları ilgili Ana Menüye atanıyor.

For...in...do.. Döngüsünün kullanımına buraya tıklayarak ulaşabilirsiniz.

Ynt: Menu Kontrolü ve Elemanların Veritabanından Alınması Gönderen: a_self_lion Tarih: 19 November 2007 09:51:48
Sayın Fatih hocam burda bende delphi 2006 var sanırım netfrework v1.1 yüklü ben burda bu anlattığınız gibi yapamam sanırım. netfremework sanırım v3 çıktı bildiğim kadarıyla bunları delphi 2006 da kullanmak mümkün mü.
Ynt: Menu Kontrolü ve Elemanların Veritabanından Alınması Gönderen: maximus51 Tarih: 05 March 2008 16:10:54
Parent Columns and Child Columns don't have type-matching columns.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.InvalidConstraintException: Parent Columns and Child Columns don't have type-matching columns.

Source Error:


Line 75: if Baglan.State = ConnectionState.Open then   Baglan.Close;
Line 76:  //ilişkiyi kur
Line 77:  iliski := DataRelation.Create('iliski', Ds.Tables['menu'].Columns[0], Ds.Tables['altmenu'].Columns[1]);
Line 78:  Ds.Relations.Add(Iliski);
Line 79:  for KayitAna in Ds.Tables['menu'].Rows do