ObjectListView高级搜索和过滤

时间:2015-02-13 00:51:50

标签: c# objectlistview treelistview

我正在尝试从ObjectListView组件中搜索和过滤TreeListView对象上的结果。目前,我正在将其实现为具有以下类

的C#(.NET 4.0)项目

MyAbstract,MyDir(继承MyAbstract)和MyFile(也继承MyAbstract)。这些类具有以下属性:名称,标题,速度,SpeedType。

我想知道如何正确地为此列表创建类似查询的过滤器,例如:

Speed < 10 OR SpeedType == "RPM"

我可能会使用LINQ,但我的主要问题是如何使用TreeListView应用和管理它。我的主要问题是:

  1. 如何在TreeListView上创建这种过滤?

  2. 如何使TreeListView仅显示已过滤的结果

  3. 如何保存原始列表以清除过滤器按钮。

  4. 这就是我目前设置列表的方式:

    public void Init()
    {
        Project.LoadDirectory();
    
        treeListView1.SetObjects(new object[] { Project.Root });
    
        treeListView1.CanExpandGetter = delegate(object x)
        {
            return (x is MyDir);
        };
    
        treeListView1.ChildrenGetter = delegate(object x)
        {
            return ((MyDir)x).Nodes;
        };
    
        olvColumn1.ImageGetter = new ImageGetterDelegate(this.TreeViewImageGetter);
    }
    

    我看了the documentation,但我仍不清楚。

1 个答案:

答案 0 :(得分:3)

你有什么尝试?

这会过滤TreeListView只显示符合您在问题中提供的条件的MyFile个对象:

this.treeListView.ModelFilter = new ModelFilter(delegate(object x) {
    var myFile = x as MyFile;
    return x != null && (myFile.Speed < 10 || myFile.SpeedType == "RPM");
});

要停止过滤,只需再次清除该文件:

this.treeListView.ModelFilter = null;

项目附带的演示显示了所有这些行为。