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

标签 c# tree objectlistview

我一直在研究 .NET 的 ObjectListView,并尝试自己搞乱它。

我来自使用 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?

最佳答案

终于明白了!

显然,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 个委托(delegate) - 一个用于告诉 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);

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

关于c# - 如何使用 ObjectListView 或 TreeListView 显示树结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11563600/

相关文章:

c# - 为什么图像大小是 NaN (wpf) 以及如何通过鼠标滚轮调整大小?

c# - 使用数据读取器处理 excel 文件 : ExecuteReader() buffers entire file

c# - 返回类型数组

r - 二叉决策树(CART)的 split 和根节点

c++ - 在删除和重新插入元素时遍历树

python - ObjectListView 使用逗号对整数进行排序和格式化?

c# - 如何检查我的 .NET 程序集的新鲜度?

java - Java中二叉树的递归检查

c# - 有没有办法在不按下 Ctrl 键的情况下在 ObjectListView 中进行多选?

c# - 使用 ObjectListView 自定义排序