WPF TreeViewItem - Pomoc

0

Witam,
mam taki problem chciałbym uzyskać coś takiego:

TreeViewItem Grupa(administratorzy) - grupa pobierana z bazy
TreeViewItem Użytkownicy - użytkownicy pobrani z bazy którzy należą do grupy administratorzy
TreeViewItem Grupa(użytkownicy) - grupa pobierana z bazy
TreeViewItem Użytkownicy - użytkownicy pobrani z bazy którzy należą do grupy użytkownicy

zapytania z bazy odczytuję przez ExecuteReader()

Z góry dziękuję i pozdrawiam
PiK

0

Witaj, trochę późno, może sam już poradziłeś a może nie i się przysłużę :)
Na wstępie powiem tylko że w moim przypadku tabela z pracownikami zawierała klucze obce do słownika "typów" tych pracowników dzięki czemu po wartości idTyp można zbadać czy pracownik jest Administratorem, Kierowcą itp....
Najpierw przy ładowaniu formatki ładowałem dane do treeview-a.
Pierwsze 5 wierszy to tworzenie obiektów poszczególnych klas, kolejno obiekt samego "drzewka" i 4 "gałęzie" (węzły)
Potem do obiektu drzewa o nazwie "x" dodaje te gałęzie zwane węzłami za pomocą metody add

 
            TreeView x = new TreeView();
            TreeNode admin = new TreeNode("Administratorzy");
            TreeNode driver = new TreeNode("Kierowcy");
            TreeNode owner = new TreeNode("Właściciel");
            TreeNode old = new TreeNode("Archiwalny");
            x.Nodes.Add(admin);
            x.Nodes.Add(driver);
            x.Nodes.Add(owner);
            x.Nodes.Add(old);

Następnie pobierałem dane z tabeli, zapytanie zwracało dwie kolumny, pierwsza to złożenie imienia i nazwiska, druga (której nie pokazywałem na drzewie) to wspomniany idTyp pracownika:

 
            SqlCommand sqlKomenda = new SqlCommand("select isnull(fp.imie,'')+' '+isnull( fp.nazwisko,''), fp.idTyp from Firma.Pracownicy fp", sql_polaczenie);
            sql_czytnikdanych = sqlKomenda.ExecuteReader();
            while (sql_czytnikdanych.Read())
            {

                if ((Convert.ToInt32(sql_czytnikdanych[1].ToString())) == 1)
                {
                    admin.Nodes.Add(sql_czytnikdanych[0].ToString());

                }
                else if ((Convert.ToInt32(sql_czytnikdanych[1].ToString())) == 2)
                {
                    driver.Nodes.Add(sql_czytnikdanych[0].ToString());
                }
                else if ((Convert.ToInt32(sql_czytnikdanych[1].ToString())) == 3)
                {
                    owner.Nodes.Add(sql_czytnikdanych[0].ToString());
                }
                else if ((Convert.ToInt32(sql_czytnikdanych[1].ToString())) == 4)
                {
                    old.Nodes.Add(sql_czytnikdanych[0].ToString());
                }

            } x.EndUpdate(); x.ExpandAll();

Jak widać badanie wartości tego idTyp pozwala określić rodzaj klienta i wrzucić go na odpowiednią gałąź drzewa.
Ewentualnie można zastosować switch-a, będzie mniej klepania :)

0

Dzięki, ale w WPF nie występuje TreeNode, poradziłem sobie używając DataAdapter

public void ShowData()
        {
            try
            {

                SqlConnection sc = new SqlConnection(connectionString);
                sc.Open();

                SqlDataAdapter SqlGroups = new SqlDataAdapter("SELECT ID,NAME  FROM tGrp", sc);

                SqlDataAdapter SqlUsers = new SqlDataAdapter("SELECT tUsrs.ID,tUsrs.SYM,GRPID FROM tUsrs INNER JOIN tUsrGrp ON tUsrGrp.USRID=tUsrs.ID", sc);

                DataSet Ds = new DataSet();
                SqlGroups.Fill(Ds, "tGrp");
                SqlUsers.Fill(Ds, "tUsrs");

                DataRelation Dr = new DataRelation("DataRelationShip",
                    Ds.Tables["tGrp"].Columns["ID"],
                    Ds.Tables["tUsrs"].Columns["GRPID"],
                    true
                    );
                Dr.Nested = true;


                Ds.Relations.Add(Dr);
                
                this.UsersTreeView.DataContext = Ds;
                sc.Close();

            }
            catch (Exception ex)
            {
                Logger.Log(ex.Message);
                Debug.WriteLine(ex.Message);
                MessageBox.Show(ex.Message);
                throw new Exception(ex.Message);
            }
        }
 

Teraz mam inny problem, mam grupę Użytkownicy i do tej grupy przypisani są dwaj użytkownicy, jak chcę usunąć grupę Użytkownicy, nie wiem jak sprawdzić czy w danej grupie są Ci użytkownicy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1