Jump to content

Dinamic Xtranavbar Oluşturma


muratboy31
 Share

Recommended Posts

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.

 

 

121ekqq.jpg

Link to comment
Share on other sites

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]

 

screenshot_82.png

Link to comment
Share on other sites

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 by KintaRo
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by muratboy31
Link to comment
Share on other sites

  • Editor

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.

Link to comment
Share on other sites

ö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 by muratboy31
Link to comment
Share on other sites

  • Editor

- 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.

Link to comment
Share on other sites

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ç:

2luur8m.jpg

 

 

 

 

30x95hx.jpg

 

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 by muratboy31
Link to comment
Share on other sites

Ş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.

Link to comment
Share on other sites

  • Editor

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 by pairs
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...