c# - 如何过滤 ObjectListView 中的多个子项

标签 c# .net vb.net winforms objectlistview

因此,我尝试以编程方式将 ModelFilter 添加到我的 ObjectListView 中,它将分别查看两个(或更多)列和过滤器。目前,我认为 ObjectListView 只支持一个过滤器,但我可能在代码/文档中遗漏了一些东西。

例如,我打算使用的过滤器之一是查看“有效”列,该列的值为“A”或“T”。另一列是主管姓名。因此,我想找到主管名称 =“Smith”且 Active =“A”的所有条目。

我可以使用 TextMatchFilter 让过滤器分别为这些选项中的任何一个工作,但无法弄清楚如何让这两个选项同时工作。

我看到的小问题是,如果主管姓名包含“A”,则使用标准过滤器将返回整行。如果我不想查看它们,我已经能够通过以编程方式将列的 Searchable 属性设置为 false 来解决这个问题,然后在过滤列表后将它们重新打开。但是,我有一种感觉,如果我为 Supervisor 列打开 Searchable,我会得到不需要的结果。

有谁知道让过滤器在多个列上工作的方法,每个过滤器只使用指定的列?

(我没有显示有助于解决此问题的示例代码。但是,如果您真的想查看我的过滤代码,我很乐意添加它;但是它是在 VB 中)。

当前代码 - 这会查看用户选择的值 (searchMeth) 并启用对该列的搜索。然后它会搜索在 txtSearch 框中输入的内容。但是,除此之外,我想为 Supervisor 添加一个额外的过滤器。 (参见 AndAlso 评论

    olvEmps.UseFiltering = True
    OlvColumn1.Searchable = False
    OlvColumn2.Searchable = False
    OlvColumn4.Searchable = False
    OlvColumn3.Searchable = False
    OlvColumn5.Searchable = False

    Select Case searchMeth
        Case "Name"
            OlvColumn1.Searchable = True
        Case "Employee Number"
            OlvColumn2.Searchable = True
        Case "Department"
            OlvColumn3.Searchable = True
    End Select

    olvEmps.OwnerDraw = True
    Dim tFilter As BrightIdeasSoftware.TextMatchFilter = BrightIdeasSoftware.TextMatchFilter.Contains(olvEmps, txtSearch.Text)
    'andalso olvColumn5 = supeName?

    olvEmps.ModelFilter = tFilter
    olvEmps.DefaultRenderer = New BrightIdeasSoftware.HighlightTextRenderer(tFilter)

    OlvColumn1.Searchable = True
    OlvColumn2.Searchable = True
    OlvColumn3.Searchable = True
    OlvColumn4.Searchable = True
    OlvColumn5.Searchable = True

最佳答案

我确信 PredicateBuilder 解决方案会起作用,但 ObjectListView 已经提供了一个更简单的解决方案。

TextMatchFilter 可以通过 Columns 属性限制它搜索的列。将其设置为您要考虑的列数组。

TextMatchFilter filter1 = TextMatchFilter.Contains(olvEmps, txtSearch.Text)
filter1.Columns = new [] { this.olvColumn1, this.olvColumn2 };

您可以使用 CompositeAllFilter 组合两个过滤器以匹配两个或多个其他过滤器。

this.olvEmps.ModelFilter = new CompositeAllFilter(new List<IModelFilter> { filter1, filter2 }); 

关于c# - 如何过滤 ObjectListView 中的多个子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9810411/

相关文章:

c# - 如何将文件放入 HttpResponseMessage 内容?

c++ - VC++。net中执行文件读取代码时出错

c# - C#中Int32的扩展方法

c# - 使 xml 更具可读性

.net - Windows窗体错误解析VB.NET

c# - 并行查询多个数据表时,异步 Controller 不会向 View 返回任何内容

c# - 从 ListBox 中的单击项获取数据

c# - 尽管指定了 NullValueHandling,但使用 Json.NET 和 Web API 序列化为 JSON,可空日期被省略

.net 可移植类库包含 Microsoft.VisualBasic 作为依赖项

c# - 我的一些基于 asp.net api 属性的路由返回 404(未找到)