因此,我试图以编程方式将 ModelFilter 添加到我的 ObjectListView 中,它将分别查看两个(或更多)列和过滤器。目前,我认为 ObjectListView 只支持一个过滤器,但我可能在代码/文档中遗漏了一些东西。
例如,我的预期过滤器之一是查看“Active”列,其值为“A”或“T”。另一列是主管姓名。因此,我想找到主管名称 =“Smith”且 Active =“A”的所有条目。
我可以使用 TextMatchFilter 让过滤器分别为这些选项中的任何一个工作,但无法弄清楚如何让这两个选项同时工作。
我看到的小问题是,如果主管名称包含“A”,那么使用标准过滤器将返回整行。如果我不想查看它们,我可以通过以编程方式将列的 Searchable 属性设置为 false 来解决这个问题,然后在过滤列表后重新打开它们。但是,我有一种感觉,如果我为 Supervisor 列打开 Searchable,我会得到不需要的结果。
有谁知道让过滤器在多个列上工作的方法,只为每个过滤器使用指定的列?
(我没有示例代码可以帮助解决这个问题。但是,如果您真的想看看我的过滤代码有什么,我很乐意添加它;但是它在 VB 中)。
当前代码 - 这会查看用户选择的值 (searchMeth) 并启用在该列上的搜索。然后它会搜索在 txtSearch 框中输入的内容。但是,除此之外,我想为主管添加一个额外的过滤器。(参见 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