2008-12-16 2 views
13

Ich betrachte diese Kontrolle, und es scheint die Standard .net „Datenquelle“ und „Datamember“ Eigenschaften für Datenbindung zu fehlen. Ist diese Kontrolle nicht bindbar? Ich kann eine benutzerdefinierte Funktion schreiben, die die Baumansicht aus einer bestimmten Datenquelle bevölkert, und Datenobjekte nach Bedarf einbetten, aber ist das die "beste Vorgehensweise"? Oder verwendet jeder einfach eine Treeview-Steuerung von Drittanbietern?Wie können Sie an ein System.Windows.Forms.Treeview-Steuerelement binden?

Antwort

8

Sie sind richtig, dass keine Daten vorhanden sind verbindlich. Der Grund dafür ist, dass TreeViews hierarchische Datenstrukturen sind. Das ist keine gerade Liste. Daher ist die Option "datenbank" ungültig, um eine Listenstruktur zu sagen.

Leider ist es Ihre eigenen bevöl Methoden erstellen oder 3rd-Party-Kontrollen Kauf (die am Ende ihre eigenen bevöl Methoden.)

Hier ist ein anständiger MSDN-Artikel auf Binding Hierarchical Data.

2

Wenn es nur ein paar Ebenen ist, Ich mag einen Datensatz mit ein paar Tabellen füllen und eine Datarelation auf den Säulen aufgebaut. Dann verwenden Sie einige verschachtelte Schleifen und erstellen Sie Ihre Baumknoten.

5

Ich benutze den Treecontrol von Express Developer. Es wird eine Tabelle von Daten nehmen und sie hierarchisch anzeigen/editieren. Alles, was es braucht, ist ein Primärschlüsselfeld und ein Eltern-ID-Feld in der Tabelle, und es kann herausfinden, was wohin geht.

Sie können das gleiche tun, wenn Sie Ihren eigenen Code rollen und Ihre eigene Klasse.

class Node 
    { 
    System.Collections.Generic.List<Node> _Children; 
    String Description; 

    void Node() 
    { 
     _Children = new System.Collections.Generic.List<Node>(); 
    } 

    public System.Collections.Generic.List<Node> Children() 
    { 
     return (_Children); 
    } 
    } 

    class Program 
    { 
    static void Main(string[] args) 
    { 
     System.Collections.Generic.List<Node> myTree = new System.Collections.Generic.List<Node>(); 
     Node firstNode = new Node(); 
     Node childNode = new Node(); 
     firstNode.Children().Add(childNode); 
    } 
    }