【问题标题】:ObjectListView advanced search and filteringObjectListView 高级搜索和过滤
【发布时间】:2015-04-13 23:19:47
【问题描述】:

我正在尝试从 ObjectListView 组件中搜索和过滤 TreeListView 对象的结果。目前,我正在将其实现到具有以下类的 C# (.NET 4.0) 项目中

MyAbstract、MyDir(继承 MyAbstract)和 MyFile(也继承 MyAbstract)。这些类具有以下属性:Name、Title、Speed、SpeedType。

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

Speed < 10 OR SpeedType == "RPM"

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

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

  2. 如何让TreeListView只显示过滤后的结果

  3. 如何让它保存原来的列表有一个清晰的过滤按钮。

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

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,但我仍然不清楚。

【问题讨论】:

    标签: c# objectlistview treelistview


    【解决方案1】:

    你试过什么?

    这将过滤 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;
    

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

    【讨论】:

    • 感谢您的评论。我想我应该把我的问题说清楚,因为我真正想知道的是如何进行这种搜索。在您的示例中,您知道我将搜索什么,但我想让它更像查询,允许用户进行不同类型的搜索查询。
    • 你问了三个问题,这个答案解决了每个问题。实现查询语言确实是一个完全不同的问题。
    • 是的,再次感谢您。我已经搜索过了,我可以看到我的搜索问题与此没有直接关系。
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2018-02-11
    • 2010-09-23
    • 2015-05-20
    • 1970-01-01
    • 2017-02-18
    相关资源
    最近更新 更多