Hallo zusammen,
ich habe folgendes Problem: in einer Datenbank gibt es eine Tabelle mit Daten, die ich in einem TreeView darstellen möchte. Jeder Datensatz hat eine eindeutige ID und falls es sich um ein Child eines anderen Datensatzes handelt, eine ParentID in der die ID des parents - wie der Name schon sagt - gespeichert ist.
Beispiel:
* ID - Name - ParentID
* 1 - Test1 - NULL
* 2 - A - 1
* 3 - B - 1
* 4 - C - 3 usw.
Diese Daten lese ich aus und möchte ich dann programmatisch dem TreeView im Page_Load einer Seite zuweisen. Ansich klappt das auch soweit. Ich habe allerdings das Problem, dass die Verschachtelungstiefe des TreeViews völlig von der Verschachtelungstiefe in meinem Code abhängt. Ich möchte die Tiefe jedoch eigentlich völlig offen lassen, sodass es z.B. keine oder nur eine Ebene geben kann, aber beispielsweise auch 30, wenn's sein muss.
Mein Code dazu:
Man sieht schnell, dass es hier nur einen Parent geben kann, der maximal zwei Ebenen darunter haben kann, dann ist Ende. Ich könnte das auch noch weiter führen, aber das wäre dann doch ziemlich unschön denke ich, außerdem wäre die Tiefe eben immer fest vorgegeben...
Gibt es da eine einfachere Möglichkeit dies zu lösen?
Danke im Voraus,
Jessica
ich habe folgendes Problem: in einer Datenbank gibt es eine Tabelle mit Daten, die ich in einem TreeView darstellen möchte. Jeder Datensatz hat eine eindeutige ID und falls es sich um ein Child eines anderen Datensatzes handelt, eine ParentID in der die ID des parents - wie der Name schon sagt - gespeichert ist.
Beispiel:
* ID - Name - ParentID
* 1 - Test1 - NULL
* 2 - A - 1
* 3 - B - 1
* 4 - C - 3 usw.
Diese Daten lese ich aus und möchte ich dann programmatisch dem TreeView im Page_Load einer Seite zuweisen. Ansich klappt das auch soweit. Ich habe allerdings das Problem, dass die Verschachtelungstiefe des TreeViews völlig von der Verschachtelungstiefe in meinem Code abhängt. Ich möchte die Tiefe jedoch eigentlich völlig offen lassen, sodass es z.B. keine oder nur eine Ebene geben kann, aber beispielsweise auch 30, wenn's sein muss.
Mein Code dazu:
Code:
protected void Page_Load(object sender, EventArgs e) { // TODO: TreeView mit Zielen füllen if (!IsPostBack) { int eId = (int)Session["eId"]; List<Ziel> zielList = ZielProvider.GetAllZielWithRelationData(eId); foreach (Ziel evalZiel in zielList) { if (evalZiel.Parent == null) { TreeNode newNode = new TreeNode(evalZiel.Name.ToString()); this.TreeViewZiele.Nodes.Add(newNode); List<Ziel> childList0 = ZielProvider.GetAllZielByParent(evalZiel.Id); foreach (Ziel childZiel0 in childList0) { TreeNode childNode0 = new TreeNode(childZiel0.Name.ToString()); newNode.ChildNodes.Add(childNode0); List<Ziel> childList1 = ZielProvider.GetAllZielByParent(childZiel0.Id); foreach (Ziel childZiel1 in childList1) { TreeNode childNode1 = new TreeNode(childZiel1.Name.ToString()); childNode0.ChildNodes.Add(childNode1); } } } } } }
Gibt es da eine einfachere Möglichkeit dies zu lösen?
Danke im Voraus,
Jessica
Comment