2010-03-03 4 views
4

Как я могу представить следующие иерархические данные? Какой контроль следует использовать, если возможно, это поможет.Представление иерархических данных .net winforms

-node 
-----node1 - -data--data --data 
-------------node111 -- data -- data 
-------------node112 -- data -- data 
-------------node113 -- data -- data 
-----node2 - -data--data --data 
-------------node1121 -- data -- data 
-----node3 - -data--data --data 

и, если возможно, мне нужно поместить в большую часть ячеек несколько значков.

Я нашел этот учебник Link, может ли кто-нибудь поддержать меня больше информации?

Возможно ли это, если да как?

Большое спасибо.

+0

Ключевым вопросом здесь может быть: вы ищете ответ, который определяет «чистую структуру данных» в коде: независимо от любых существующих элементов управления WinForms, или третьего. партийный контроль. Или вы согласны принять ответ, который использует существующий или третий. партийный контроль? Пожалуйста, см. Мой комментарий к ответу Локи. – BillW

ответ

2

Встроенные элементы управления Windows Forms для этого не подходят. То, что вы на самом деле ищете, представляет собой гибридный элемент с деревом-сеткой (дерево с несколькими колонками AKA или TreeList).

DevExpress имеет XtraTreeList, который я использую (не бесплатно), и, вероятно, ближе всего к тому, что вы просите. Telerik's GridView также может отображать данные сетки иерархически, если вы правильно настроили группировки.

Если эти цены слишком крутые, вы можете попробовать FlexibleTreeView. Или, если вам отчаянно нужно что-то бесплатно, ознакомьтесь с этой страницей CodeProject: Advanced TreeView for .NET. Это будет лот более изворотливым и сложным в использовании, чем коммерческие продукты, но он будет выполнять эту работу.

Обратите внимание, что я предполагаю, что данные являются однородными, что вы в основном хотите отображать одни и те же данные для каждого узла в иерархии. Если данные являются гетерогенными (полностью разные столбцы в зависимости от типа узла или уровня), то вы фактически хотите использовать иерархический GridView. Вы можете получить их от тех же издателей, перечисленных выше. Я не знаю ни одной полупристойной бесплатной версии.

1

Используйте управления TreeView

+0

как в управлении TreeView я могу разместить несколько значков в каждом узле? и объединить его с gridcontol? –

1

Одним из способов может быть создание производного объекта TreeNode, заставить его содержать List<data>:

// requires declaration of : using System.Windows.Forms; 

// sample data class 
public class data 
{ 
    public string Name; 
    public int ID; 
} 

public class XTreeNode : TreeNode 
{ 
    List<data> theData = new List<data>(); 

    public XTreeNode(string theNodeID) 
    { 
     this.Text = theNodeID; 
    } 

    public void addData(data newData) 
    { 
     theData.Add(newData); 
    } 
} 

Вот (не изящный) пример того, что строительство экземпляра выше структура данных может выглядеть следующим образом (на WinForm): предположим, у вас есть TreeView, названный «treeView1 на форме:

XTreeNode currentNode; 
    data currentData; 

    for (int i = 0; i < 10; i++) 
    { 
     // create the node and add it to the 'treeView1 
     currentNode = new XTreeNode(i.ToString()); 
     treeView1.Nodes.Add(currentNode); 

     // add some data entries to the List<data> of the derived TreeNode 
     currentData = new data {Name = "one", ID = 100}; 
     currentNode.addData(currentData); 

     currentData = new data { Name = "two", ID = 200 }; 
     currentNode.addData(currentData); 

     currentData = new data { Name = "three", ID = 300 }; 
     currentNode.addData(currentData); 

     // sample of adding a child node 
     currentNode.Nodes.Add(new XTreeNode((i * 100).ToString())); 
    } 

на вопрос о том, как лет u woud визуально отображает List<data>, связанный с каждым Узлом: обычным способом было бы объединить Treeview с ListView и синхронизировать их местоположения и высоты элементов: затем отобразить List<data> в той же «строке», что и соответствующий TreeNode.

Конечно, вы можете реализовать свои собственные узлы Node и NodeCollection, которые полностью независимы от любого элемента управления: этот пример представляет собой смешанный случай использования элемента управления .NET, который служит как структурой данных, так и механизмом представления.

Отличный пример сочетания TreeView/ListView в CodeProject, который поддерживался, обновлялся и расширялся в течение многих лет: Phillip Piper's: "A Much Easier to Use ListView", впервые опубликованный в 2006 году, последнее обновление октября 2009 года: его функциональность настолько богата, что если сравнивать выгодно, imho, с коммерческими компонентами.

Смежные вопросы