Представление иерархических данных .net winforms - PullRequest
4 голосов
/ 03 марта 2010

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

-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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 03 марта 2010

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

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

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

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

1 голос
/ 03 марта 2010

Одним из способов может быть создание производного объекта 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()));
    }

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

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

Существует отличный пример комбинации TreeView / ListView на CodeProject, которая поддерживается, обновляется и расширяется годами: Филипп Пайпер: «Намного проще использовать ListView» , впервые опубликован в 2006 году, последнее обновление, октябрь 2009 года: его функциональность настолько богата, что, если сравнивать, imho с коммерческими компонентами

1 голос
/ 03 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...