如何使用ObjectListView或TreeListView显示树结构

时间:2012-07-19 14:58:42

标签: c# tree objectlistview

我一直在研究ObjectListView for .NET,并且我自己也试过搞乱它。

我来自使用VirtualTreeview和Delphi,所以如果你能指出相似之处,那就太棒了!

我尝试使用TreeListView和以下类创建一个多级树:

public class MyClass
{
    public string Name { get; set; }
    public List<MyClass> MyClasses { get; set; }
    public MyClass(string name)
    {
        Name = name;
        MyClasses = new List<MyClass>();
    }
}

TreeListView是一个设计时组件。我使用此代码创建虚拟数据并让TreeListView显示它。

var MyClasses = new List<MyClass>();
MyClasses.Add(new MyClass("Bob"));
MyClasses.Add(new MyClass("John"));
var myClass = new MyClass("Mike");
myClass.MyClasses.Add(new MyClass("Joe"));
MyClasses.Add(myClass);

treeListView1.SetObjects(MyClasses);

我还有一个显示Name属性的列。

所有这些都有效,除了我没有看到Mike节点的子节点。我似乎无法弄清楚在这做什么。我查看了文档,但找不到任何有用的信息。

此外,像这样的多级结构可以与ObjectListView的其他变体一起使用,例如FastObjectListView吗?

2 个答案:

答案 0 :(得分:6)

终于明白了!

显然,可以通过设计用于树结构的ObjectListView套件的唯一变体是TreeListView

以下是我设法让我的TreeListView显示以下类的列表:

public class MyClass
{
    public string Name { get; set; }
    public List<MyClass> MyClasses { get; set; }
    public MyClass(string name)
    {
        Name = name;
        MyClasses = new List<MyClass>();
    }
}

在Form构造函数中,我们需要2个委托 - 一个用于告诉OLV一个对象是子对象,另一个用于将子列表传递给OLV。

// model is the currently queried object, we return true or false according to the amount of children we have in our MyClasses List
treeListView1.CanExpandGetter = model => ((MyClass)model).
                                              MyClasses.Count > 0;
// We return the list of MyClasses that shall be considered Children.
treeListView1.ChildrenGetter = delegate(object model)
                                       {
                                           return ((MyClass) model).
                                                   MyClasses;
                                       };

// We also need to tell OLV what objects to display as root nodes
treeListView1.SetObjects(listOfObjects);

我还发现每当我添加子对象时都需要刷新父对象。

答案 1 :(得分:1)

我在这里找到了文档:http://objectlistview.sourceforge.net/html/cookbook.htm#recipeTreeListView加上使用ObjectListView附带的演示非常好。