2008-12-16 12 views
13

Estoy mirando este control, y parece carecer de las propiedades .net "datasource" y "datamember" estándar para el enlace de datos. ¿Este control no es vinculable? Puedo escribir alguna función personalizada que llene la vista de árbol de una fuente de datos dada, supongo, e incrustar objetos de datos según sea necesario, pero ¿esa es la 'mejor práctica'? ¿O simplemente todo el mundo usa un control treeview de terceros?¿Cómo se relaciona con un control System.Windows.Forms.Treeview?

Respuesta

8

Tiene razón en que no hay enlace de datos. La razón es que TreeViews son estructuras de datos jerárquicas. Es decir, no es una lista directa. Como resultado, la opción de enlace de datos no es válida para decir una estructura de lista.

Lamentablemente está creando sus propios métodos pueblan o la compra de los controles de 3 ª parte (que al final va a tener sus propios métodos pueblan.)

Aquí está un artículo de MSDN decente en Binding Hierarchical Data.

2

Si solo son un par de niveles, me gusta llenar un conjunto de datos con un par de tablas y configurar una DataRelation en las columnas. Luego usa algunos bucles anidados y crea sus nodos de árbol.

5

Uso el control de árbol desde Developer's Express. Tomará una tabla de datos y la mostrará/editará de forma jerárquica. Todo lo que necesita es un campo de clave principal y un campo de identificación padre en la tabla y puede averiguar qué va donde.

Puede hacer lo mismo si saca su propio código y usa su propia clase.

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); 
    } 
    } 
Cuestiones relacionadas