muratboy31 Posted October 21, 2015 Share Posted October 21, 2015 Merhaba arkadaşlar, dinamik bir Navbar yapmak istiyorum, iki adet tablo oluşturdum, biri Navbar Grupları için diğeri Navbar Grup İtemleri için, yapmak istediğim; tablo dan grupları çekip navbar oluştursun ve sonrasında bu grupların içinde itemleri oluştursun, eşleşmeleri GroupID lerle yapacam. GroupID leri Tag larda tutabilirim gibi geliyor. Kodlama tarafında karmaşa içindeyim, yardımcı olabilecek arkadaş varsa çok sevinirm. Quote Link to comment Share on other sites More sharing options...
KintaRo Posted October 21, 2015 Share Posted October 21, 2015 Kodlar: [spoiler] DataTable anaTablo = new DataTable(); anaTablo.Columns.Add("GroupID"); anaTablo.Columns.Add("GroupName"); anaTablo.Columns.Add("GroupIcon"); anaTablo.Rows.Add("1", "Satınalma", ""); anaTablo.Rows.Add("2", "Muhasebe", ""); anaTablo.Rows.Add("3", "Sevkiyat", ""); DataTable kayitlar = new DataTable(); kayitlar.Columns.Add("ItemID"); kayitlar.Columns.Add("ItemName"); kayitlar.Columns.Add("GroupID"); kayitlar.Rows.Add("1", "Ahmet", "1"); kayitlar.Rows.Add("2", "Murat", "2"); kayitlar.Rows.Add("3", "Mustafa", "1"); kayitlar.Rows.Add("4", "Mesut", "3"); kayitlar.Rows.Add("5", "Nalan", "2"); kayitlar.Rows.Add("6", "Ali", "1"); kayitlar.Rows.Add("7", "Veli", "1"); kayitlar.Rows.Add("8", "Mahmut", "3"); kayitlar.Rows.Add("9", "Selami", "2"); kayitlar.Rows.Add("10", "Şahin", "3"); kayitlar.Rows.Add("11", "Nazım", "2"); foreach (DataRow item in anaTablo.Rows) { string grup_id = item["GroupID"].ToString(); string grup_isim = item["GroupName"].ToString(); // grubu oluştur NavBarGroup grup = new NavBarGroup() { Caption = grup_isim, Expanded = true, }; navBarControl1.Groups.Add(grup); // itemler foreach (DataRow kayit in kayitlar.Rows) { string item_isim = kayit["ItemName"].ToString(); string item_grup = kayit["GroupID"].ToString(); if (grup_id == item_grup) { NavBarItem navItem = new NavBarItem() { Caption = item_isim, }; grup.ItemLinks.Add(navItem); } } } [/spoiler] Quote Link to comment Share on other sites More sharing options...
muratboy31 Posted October 22, 2015 Author Share Posted October 22, 2015 (edited) Teşekkürler Kintaro Gruplar ve itemler neden visible olmuyor acaba ! [spoiler] public void Create_Navbar() { SqlConnection mycon = new SqlConnection(); SqlCommand mycommand = new SqlCommand(); SqlDataAdapter adp = new SqlDataAdapter(mycommand); DataTable Group = new DataTable(); DataTable Item = new DataTable(); try { mycon.ConnectionString = Connect; mycon.Open(); // grupları al mycommand.Connection = mycon; mycommand.CommandText = "sp_Navbar_Group_Creation"; mycommand.CommandType = CommandType.StoredProcedure; adp.Fill(Group); // itemleri al mycommand.Connection = mycon; mycommand.CommandText = "sp_Navbar_Item_Creation"; mycommand.CommandType = CommandType.StoredProcedure; adp.Fill(Item); } catch (Exception e) { MessageBox.Show(Convert.ToString(e)); } finally { mycon.Close(); } foreach (DataRow gRow in Group.Rows) { string GrupID = gRow["GroupID"].ToString(); string GrupName = gRow["GroupName"].ToString(); // grupları oluştur NavBarGroup NavGroup = new NavBarGroup(); NavGroup.Caption = GrupName; NavGroup.Name = GrupID; NavGroup.Expanded = true; NavGroup.Visible = false; navBarControl2.Groups.Add(NavGroup); // itemleri oluştur foreach (DataRow iRow in Item.Rows) { string ItemID = iRow["ItemID"].ToString(); string ItemName = iRow["ItemName"].ToString(); string ItemGroup = iRow["GroupID"].ToString(); string TypeID = iRow["TypeID"].ToString(); if (GrupID == ItemGroup) { NavBarItem navItem = new NavBarItem(); navItem.Name = ItemID; navItem.Caption = ItemName; navItem.Tag = TypeID; navItem.LinkClicked += new NavBarLinkEventHandler(navBarItem_LinkClicked); navItem.Visible = false; NavGroup.ItemLinks.Add(navItem); } } } } public void Yetki(string user) { SqlConnection mycon = new SqlConnection(); SqlCommand mycommand = new SqlCommand(); SqlDataAdapter adp = new SqlDataAdapter(mycommand); try { mycon.ConnectionString = Connect; mycon.Open(); mycommand.Connection = mycon; mycommand.CommandText = "sp_Yetki_Listele"; mycommand.CommandType = CommandType.StoredProcedure; mycommand.Parameters.Add("@username", SqlDbType.NVarChar, 30); mycommand.Parameters["@username"].Value = user; DataTable Auth = new DataTable(); adp.Fill(Auth); foreach (DataRow Row in Auth.Rows) { foreach (NavBarGroup NavGrup in navBarControl2.Groups) { if (NavGrup.Caption == Row["FormName"].ToString()) NavGrup.Visible = true; } foreach (NavBarItem NavItem in navBarControl2.Items) { if (NavItem.Caption == Row["FormName"].ToString()) NavItem.Visible = true; } } } catch (Exception e) { MessageBox.Show(Convert.ToString(e)); } finally { mycon.Close(); } } private void Form1_Load(object sender, EventArgs e) { Create_Navbar(); Yetki("Murat"); } [/spoiler] Edited October 22, 2015 by KintaRo Quote Link to comment Share on other sites More sharing options...
KintaRo Posted October 22, 2015 Share Posted October 22, 2015 CreateNavBar() methodunnda if (GrupID == ItemGroup) { NavBarItem navItem = new NavBarItem(); navItem.Name = ItemID; navItem.Caption = ItemName; navItem.Tag = TypeID; navItem.LinkClicked += new NavBarLinkEventHandler(navBarItem_LinkClicked); navItem.Visible = false; NavGroup.ItemLinks.Add(navItem); } navItem.Visible = false; yapmışsın, sanırım bu yüzden. Ayrınca Exception mesajını yakalamak için Convert.ToString(e) yerine e.Message kullanabilirsin. Quote Link to comment Share on other sites More sharing options...
muratboy31 Posted October 22, 2015 Author Share Posted October 22, 2015 (edited) evet create ettiğimde visible false ama sonra yetki varsa tekrar visible true yapıyorum. hata vermiyor, sadece gruplar visible oluyor ancak itemler olmuyor... Edited October 22, 2015 by muratboy31 Quote Link to comment Share on other sites More sharing options...
KintaRo Posted October 22, 2015 Share Posted October 22, 2015 o zaman sql sorgunda, procedure'unde hata var, onlar nedir? Quote Link to comment Share on other sites More sharing options...
muratboy31 Posted October 22, 2015 Author Share Posted October 22, 2015 (edited) PROCEDURE [dbo].[sp_Auth](@username varchar(30)) AS BEGIN select * from dbo.[Auth] where UserName = @username END Murat Apple Murat Isprots Mustafa SapTec Mustafa Kısayollar Mustafa Araçlar Murat Araçlar Murat SapTec Murat Ipros Murat Vtekone Murat Rehber Mustafa Qdmss Murat Klasörler Mustafa Ekler Edited October 22, 2015 by muratboy31 Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted October 22, 2015 Editor Share Posted October 22, 2015 Yetki konusunda en güzel duru nesnelerin taglarına veritabanındaki isimleri girmektir. nesne.Visible = Checkyetkikodu(nesne.tag); // return true veya false gibi kullanırım hep. Quote Link to comment Share on other sites More sharing options...
muratboy31 Posted October 22, 2015 Author Share Posted October 22, 2015 (edited) örneği biraz daha açabilir misin lütfen pairs ben caption ile yapıyorum nesne bilgilerini, tag a ID bilgilerini giriyorum... anlam veremediğim, Gruplar visible oluyor ancak grupların içindeki Itemler visible olmuyor !!! Edited October 22, 2015 by muratboy31 Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted October 22, 2015 Editor Share Posted October 22, 2015 - Personel -->Personel Ekle -->Personel Sil -Muhasebe -->Fatura Gir -->Fatura Listele gibi bir yapı olsun. bunların tag lerine ID veya isim ver. veritabanındada yetkikodları diye tablon olsn. ID,YETKI,YETKIID gibi düşün tabloyu. şimdi nesnelere ID verelim. - Personel (PERSONELNAVBAR) -->Personel Ekle (PERSONELEKLE) -->Personel Sil (PERSONEL SIL) -Muhasebe -->Fatura Gir -->Fatura Listele yapacagın. form açılırken veya neresi olursa . Bi fonksiyon yazıp CheckYetkiKodu diye geriye boolean döncek. Kullanırkende PersonelEkle.Visible = CheckYetkiKodu(PersonelEkle.Tag); gibi düşün. Quote Link to comment Share on other sites More sharing options...
muratboy31 Posted October 22, 2015 Author Share Posted October 22, 2015 (edited) bende buna benzer bi yapı kullandım ancak 0 - 1 değilde, eğer nesne adı var ise visible yapıyor. tek tek bütün nesnelere 0 - 1 girmek zor gibi geldi... benim anlamadığım Itemler hariç herşeyin visible olması... birtek Itemler sorun çıkarıyor !!! Sonuç: stored procedure : PROCEDURE [dbo].[sp_Auth](@username varchar(30)) AS BEGIN select * from dbo.[Auth] where UserName = @username END c#: public void Create_Navbar() { SqlConnection mycon = new SqlConnection(); SqlCommand mycommand = new SqlCommand(); SqlDataAdapter adp = new SqlDataAdapter(mycommand); DataTable Group = new DataTable(); DataTable Item = new DataTable(); try { mycon.ConnectionString = Connect; mycon.Open(); // grupları al mycommand.Connection = mycon; mycommand.CommandText = "sp_Navbar_Group_Creation"; mycommand.CommandType = CommandType.StoredProcedure; adp.Fill(Group); // itemleri al mycommand.Connection = mycon; mycommand.CommandText = "sp_Navbar_Item_Creation"; mycommand.CommandType = CommandType.StoredProcedure; adp.Fill(Item); } catch (Exception e) { MessageBox.Show(Convert.ToString(e)); } finally { mycon.Close(); } foreach (DataRow gRow in Group.Rows) { string ItemGrupID = gRow["GroupID"].ToString(); string ItemGrupName = gRow["GroupName"].ToString(); // grupları oluştur NavBarGroup NavGroup = new NavBarGroup(); NavGroup.Caption = ItemGrupName; NavGroup.Name = ItemGrupID; NavGroup.Expanded = true; NavGroup.Visible = false; navBarControl2.Groups.Add(NavGroup); // itemleri oluştur foreach (DataRow iRow in Item.Rows) { string ItemID = iRow["ItemID"].ToString(); string ItemName = iRow["ItemName"].ToString(); string ItemGroup = iRow["GroupID"].ToString(); string TypeID = iRow["TypeID"].ToString(); string ItemLink = iRow["ItemLink"].ToString(); if (ItemGrupID == ItemGroup) { NavBarItem navItem = new NavBarItem(); navItem.Name = ItemID; navItem.Caption = ItemName; navItem.Tag = ItemLink; navItem.LinkClicked += new NavBarLinkEventHandler(navBarItem_LinkClicked); navItem.Visible = false; NavGroup.ItemLinks.Add(navItem); } } } } public void Yetki(string user) { SqlConnection mycon = new SqlConnection(); SqlCommand mycommand = new SqlCommand(); SqlDataAdapter adp = new SqlDataAdapter(mycommand); try { mycon.ConnectionString = Connect; mycon.Open(); mycommand.Connection = mycon; mycommand.CommandText = "sp_Auth"; mycommand.CommandType = CommandType.StoredProcedure; mycommand.Parameters.Add("@username", SqlDbType.NVarChar, 30); mycommand.Parameters["@username"].Value = user; DataTable Auth = new DataTable(); adp.Fill(Auth); foreach (DataRow Row in Auth.Rows) { foreach (NavBarGroup NavGrup in navBarControl2.Groups) { if (NavGrup.Caption == Row["FormName"].ToString()) { NavGrup.Visible = true; NavGrup.Expanded = true; } } foreach (NavBarItem NavItem in navBarControl2.Items) { if (NavItem.Caption == Row["FormName"].ToString()) NavItem.Visible = true; } foreach (DevExpress.XtraTab.XtraTabPage Tab in xtraTabControl1.TabPages) { if (Tab.Text == Row["FormName"].ToString()) Tab.PageVisible = true; } } } catch (Exception e) { MessageBox.Show(Convert.ToString(e)); } finally { mycon.Close(); } } private void Form1_Load(object sender, EventArgs e) { Create_Navbar(); Yetki("Murat"); } Edited October 22, 2015 by muratboy31 Quote Link to comment Share on other sites More sharing options...
KintaRo Posted October 22, 2015 Share Posted October 22, 2015 Şu döngüyü foreach (NavBarGroup NavGrup in navBarControl2.Groups) { if (NavGrup.Caption == Row["FormName"].ToString()) { NavGrup.Visible = true; NavGrup.Expanded = true; } } Şununla değiştirip dener misin foreach (NavBarGroup NavGrup in navBarControl2.Groups) { if (NavGrup.Caption == Row["FormName"].ToString()) { foreach (NavBarItem item in NavGrup.ItemLinks) { item.Visible = true; } NavGrup.Visible = true; NavGrup.Expanded = true; } } ve onun altındaki foreach (NavBarItem NavItem in navBarControl2.Items) döngüsüne ihtiyacın yok. Senin yapman gereken grupların içindeki itemler'de döngü yapıp kontrol sağlamak, sen bu son verdiğim döngü ile direk NavBar'ın itemlerinin arasında dolaşıyorsun. Bu bana mantık hatası gibi geldi. Quote Link to comment Share on other sites More sharing options...
muratboy31 Posted October 22, 2015 Author Share Posted October 22, 2015 (edited) bu hatayı verdi ; (bu arada itemlerde de Yetki var ayrı ayrı, yane sadece Grouplarda değil) Edited October 22, 2015 by muratboy31 Quote Link to comment Share on other sites More sharing options...
KintaRo Posted October 22, 2015 Share Posted October 22, 2015 foreach (NavBarItem item in NavGrup.ItemLinks) yerine foreach (NavBarItemLink item in NavGrup.ItemLinks) şeklinde deneyin. deneyemediğim için bilemiyorum nerede hata var. Quote Link to comment Share on other sites More sharing options...
muratboy31 Posted October 22, 2015 Author Share Posted October 22, 2015 (edited) hata vermedi ancak yine itemleri göstermiyor. Edited October 22, 2015 by muratboy31 Quote Link to comment Share on other sites More sharing options...
Editor pairs Posted October 22, 2015 Editor Share Posted October 22, 2015 (edited) grup ve itemler iç içe for da olması lazım. Yanlş olmuş kodlama. Proje dosyasını atarmısın. Yada uzaktan bağlanıp bakayım yine. Edited October 22, 2015 by pairs Quote Link to comment Share on other sites More sharing options...
muratboy31 Posted October 23, 2015 Author Share Posted October 23, 2015 ilginçtir, false true ya dönmüyor ama, true değeri false yapınca çalışıyor !!! normalde ben create olayında hepsini false yapıp sonra yetkiye göre true yapıyordum ancak bu şekilde ştemler true olmuyordu ama hepsini create te true yapınce yetkilere göre false çalışıyor. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.