Announcement

Collapse
No announcement yet.

Treeview

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Treeview

    Hallo,

    ich möchte einen Treeview erstellen, indem ich aus der Datenbank erst die "Väter" auslese und in den Treeview einfüge und danach die Detaildatensätze auslese und auf Basis der Keys der Väter im Treeview einfüge. Leider klappt das nicht. Vielleicht kann mir jem. sagen, wo mein Fehler ist. Der Fehler ist in der Fett-geschriebenen Zeile.

    Code:
                    strSQL = "SELECT * FROM Tabelle1;";
                    dt = ((frmHauptfenster)this.MdiParent).DB_Helper.QueryDT(strSQL);
                    dtr = new DataTableReader(dt);
                    this.Treeview.Nodes.Clear();
                    this.Treeview.Nodes.Add("n0", "Root");
                    while (dtr.Read())
                    {                                
                        this.Treeview.Nodes["n0"].Nodes.Add("n" + dtr["ID"].ToString(), dtr["Bezeichnung"].ToString());                   
                    }
    //Detaildatensätze, als Kinder der oben eingefügten Nodes:
                    strSQL = "SELECT * FROM Tabelle2;";
                    dt = ((frmHauptfenster)this.MdiParent).DB_Helper.QueryDT(strSQL);
                    dtr = new DataTableReader(dt);            
                    while (dtr.Read())
                    {
                            this.tvwProduktRelease.Nodes["n" + dtr["ParentID"].ToString()].Nodes.Add("p" + dtr["ID"].ToString(), dtr["Bezeichnung"].ToString());
                   }
    Wenn ich statt "n" + dtr["ParentID"].ToString() nur "n" + 0 eingebe, klappt das.
    Ich bin nicht die Signatur, ich putz hier nur

  • #2
    Hallo Askor,

    soweit ich Dich verstanden habe befindet sich auf der obersten Ebene nur "n0".
    Als Unterknoten folgen dann die "parent"-Einträge.
    Und als dritte Stufe sollen dann Deine Detaildatensätze kommen.
    Dann fehlt bei Deiner hervorgehobenen Zeile der "n0"-Knoten:

    this.tvwProduktRelease.Nodes["n0"].Nodes["n" + dtr["ParentID"].ToString()].Nodes.Add("p" + dtr["ID"].ToString(), dtr["Bezeichnung"].ToString());

    Mit freundlichen Grüßen,


    rednax

    Comment


    • #3
      Das war aber nur ein Beispiel, was ist, wenn eine Tabelle auf sich selbst zeigt und ich eine beliebige Knotentiefe bekomme und nicht weiß, auf welcher Ebene der Vaterknoten liegt? Gibt es keine Lösung, so dass ich mittels des ParentKeys einen Knoten einfügen kann, egal wo sich der Parent im Baum befindet?
      Ich bin nicht die Signatur, ich putz hier nur

      Comment


      • #4
        Hallo Askor,

        Code:
                    Dictionary<int, TreeNode> Gesamtliste = new Dictionary<int, TreeNode>();
        
                    Gesamtliste.Add(1, treeView1.Nodes.Add("Hauptknoten"));
        
                    Gesamtliste.Add(2, Gesamtliste[1].Nodes.Add("Unterknoten 1"));
                    Gesamtliste.Add(3, Gesamtliste[1].Nodes.Add("Unterknoten 2"));
        
                    Gesamtliste.Add(4, Gesamtliste[2].Nodes.Add("Unter-Unterknoten 1"));
                    Gesamtliste.Add(5, Gesamtliste[2].Nodes.Add("Unter-Unterknoten 2"));
                    Gesamtliste.Add(6, Gesamtliste[2].Nodes.Add("Unter-Unterknoten 3"));
        
        
                    Gesamtliste.Add(7, Gesamtliste[5].Nodes.Add("Unter-Unter-Unterknoten 1"));
                    Gesamtliste.Add(8, Gesamtliste[5].Nodes.Add("Unter-Unter-Unterknoten 2"));
                    Gesamtliste.Add(id, Gesamtliste[pid].Nodes.Add("x"));
        Wobei id für den Id-Wert steht und pid für den ParentId-Wert.


        Mit freundlichen Grüßen,


        rednax

        Comment


        • #5
          Also geht das nicht ohne eine Hilfsliste. Schade.
          Wenn ich den Baum gefüllt habe und in einer anderen Methode nur einen Node hinzufügen möchte, muss ich quasi immer das Dictionary mit aktualisieren oder alle Knoten durchlaufen, oder?
          Ich bin nicht die Signatur, ich putz hier nur

          Comment

          Working...
          X