【问题标题】:ObjectListView how to show child list<>ObjectListView 如何显示子列表<>
【发布时间】:2013-10-04 18:25:17
【问题描述】:

您好,我正在使用 ObjectListView,并且拥有这些类:

public class Person
{
    public string Name{get;set;}
    public List<Things> {get;set;}
}

public class Things
{
    public string Name{get;set;}
    public string Description{get;set;}
}

如何在 ObjectListView 中显示类似的内容:

【问题讨论】:

  • 非常相似但不重复我的问题是关于 ObjectListView 和 WinForms,另一个是 WPF 和 DataGridView。
  • 不是真的,OP询问了winforms,但我告诉他winforms完全没用,它不支持任何东西并提供了一个WPF解决方案,他接受了。没有人能够提出更好的解决方案,这强化了我的观点,即 winforms 是无用的。如果您愿意,可以接受我的建议,并在您现有的 winforms 应用程序中添加 ElementHost 来托管 WPF 内容。

标签: c# winforms objectlistview


【解决方案1】:

我相信树视图可以在这里提供帮助。您可以使用作为 ObjectListView 一部分的 TreeListView 组件。它在使用上非常相似。您必须提供相关代表,TLV 将完成这项工作。

我建立了一个简单的例子:

当然,还有很大的定制和改进空间。

public partial class Form2 : Form {
    public Form2() {
        InitializeComponent();

        // let the OLV know that a person node can expand 
        this.treeListView.CanExpandGetter = delegate(object rowObject) {
            return (rowObject is Person);
        };

        // retrieving the "things" from Person
        this.treeListView.ChildrenGetter = delegate(object rowObject) {
            Person person = rowObject as Person;
            return person.Things;
        };

        // column 1 shows name of person
        olvColumn1.AspectGetter = delegate(object rowObject) {
            if (rowObject is Person) {
                return ((Person)rowObject).Name;
            } else {
                return "";
            }
        };

        // column 2 shows thing information 
        olvColumn2.AspectGetter = delegate(object rowObject) {
            if (rowObject is Thing) {
                Thing thing = rowObject as Thing;
                return thing.Name + ": " + thing.Description;
            } else {
                return "";
            }
        };

        // add one root object and expand
        treeListView.AddObject(new Person("Person 1"));
        treeListView.ExpandAll();
    }
}

public class Person {
    public string Name{get;set;}
    public List<Thing> Things{get;set;}

    public Person(string name) {
        Name = name;
        Things = new List<Thing>();
        Things.Add(new Thing("Thing 1", "Description 1"));
        Things.Add(new Thing("Thing 2", "Description 2"));
    }
}

public class Thing {
    public string Name{get;set;}
    public string Description{get;set;}

    public Thing(string name, string desc) {
        Name = name;
        Description = desc;
    }
}

除了提供的代码之外,您显然必须将 TLV 添加到您的表单并添加两列。

【讨论】:

    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多