04. oktober 2008 - 22:51Der er
1 kommentar og 1 løsning
Dynamisk generering af treeview i windows applikation.
Hejsa.
Har et spørgsmål til hvordan jeg kan gribe dette an.
Jeg har en tabel i en SQL database som indeholder en oversigt over websider.
Hver record har f.eks. disse felter (der er flere, men afkortet for at gøre det overskueligt)...
1. Identify ID felt. 2. Navn 3. Parent
Parent er ID'et på den side som skal være forældrer eller overordnet til den pågældende side i mit treeview.
Jeg har så et side objekt til hver side. Jeg har også en HashTable som indeholder alle sideobjekterne.
Hvis Parent er 0 ville jeg gerne have siden ind i mit treeview som rod. Der kan godt være flere sider med parent = 0.
Mit HashTable er sorteret efter Navn egenskaben for siderne. Dvs. de ligger i alfabetisk rækkefølge i mit hashtable og ikke efter hvilken Parent de har.
Hvis jeg vidste hvor mange niveauer det skulle gå ned var det ikke noget problem, men det ved jeg ikke. Jeg skal på en eller anden måde kunne generere indholdet i et treeview ud fra objekterne i min hashtable.
Jeg skal altså kunne løbe tabellen igennem, og finde alle objekter som har parent = 0.
Hvis et side objekt har parent = 0 skal det altså tilføjes treeviewet. Dette side objekt har så f.eks. id = 5. Jeg skal så også finde alle side objekter i hashtabellen som har parent = 5 og så få disse tilføjet. Et af disse objekter har så f.eks. id = 9. Og igen så skal alle objekter med parent = 9 så tilføjes hertil osv...
Jeg ved bare ikke hvordan jeg kan gøre dette på den bedste og rigtige måde.
Jeg ville trække alle dine sider ud af databasen, lave et TreeNode-object for hver række i dit udtræk og sætte dem ind i et Dictionary (typestærkt hashtable) med Identify ID som key. For at kunne identificere parent ville jeg sende denn med som Tag på hver TreeNode. Hvis du har mere end bare parentID, der skal med rundt kunne du lave en class til at indeholde alt din data for hver node. Ved til sidst at loop'e alle Dictionary's keys igennem kan du pare dem rigtigt.
Sample kode: SqlCommand cmd = new SqlCommand("SELECT id, navn, parentID FROM Websites;"); Dictionary<int, TreeNode> websites = new Dictionary<int, TreeNode>();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read()) { string navn = rdr["navn"].ToString(); int id = int.Parse(rdr["id"].ToString()); int parentID = int.Parse(rdr["parentID"].ToString());
Perfekt. Med lidt modifikationer for at blive tilpasset mine objekter, fungerede denne løsning super godt. Har altid brugt HashTables, men kan da se at jeg skal til at lege med Dictionary objektet i stedet for.
Hold op hvor man også kan spare meget type casting kode...
Tak for hjælpen!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.