そのため、プログラムでModelFilterをObjectListViewに追加して、それぞれの2つ(またはそれ以上)の列とフィルターを個別に調べようとしています。現在、ObjectListViewは1つのフィルターしかサポートしていないと思いますが、コード/ドキュメントに何かが欠けている可能性があります。
例として、私の意図したフィルターの1つは、「A」または「T」の値を持つ「アクティブ」列を調べることです。別の列はスーパーバイザー名です。したがって、Supervisor name="Smith"およびActive="A"であるすべてのエントリを検索したいと思います。
TextMatchFilterを使用して、これらのオプションのいずれかに対してフィルターを個別に機能させることはできますが、両方を同時に機能させる方法を理解することはできません。
私が見る小さな問題は、スーパーバイザー名に「A」が含まれている場合、標準のフィルターを使用すると行全体が返されることです。列を表示したくない場合は、プログラムで列のSearchableプロパティをfalseに設定し、リストがフィルター処理されたら再びオンにすることで、これを回避することができました。ただし、[スーパーバイザー]列で[検索可能]をオンにすると、望ましくない結果が得られると感じています。
各フィルターに指定された列のみを使用して、フィルターを複数の列で機能させる方法を知っている人はいますか?
(これを解決するのに役立つサンプルコードはありません。ただし、フィルタリングコードに何があるかを本当に確認したい場合は、喜んで追加します。ただし、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