ユーザーがレコードをフィルターするために、 FieldSettings オブジェクトの AllowRecordFiltering プロパティを設定する必要があります。ユーザーにフィルタリング操作の実行を許可していない場合も FieldLayout オブジェクトの RecordFilters コレクションまたは RecordManager オブジェクトの RecordFilters コレクションに RecordFilter オブジェクトを追加してプログラム的にフィルター レコードを追加できます。ユーザーがレコード フィルターを設定するための方法をコントロールが公開していない場合も xamDataCarousel™ コントロールでプログラム的にレコードをフィルターすることができます。
宣言的に FieldSettings
オブジェクトの AllowRecordFiltering
プロパティを true
に設定した場合、コントロールはフィールド レイアウトの各フィールドのための RecordFilter
オブジェクトを自動生成します。この RecordFilter
オブジェクトは、RecordFilters
の Clear
メソッドを呼び出したあとも FieldLayout.RecordFilters
から削除されません。ただし、そのフィルタリング Conditions はクリアできます。
プログラム的にレコード フィルターを作成するときにカスタム RecordFilter
を追加する代わりに、自動生成された RecordFilter
を使用して、そのフィルタリング Conditions
を変更できます。
RecordFilter
オブジェクトは、フィールドのセル値に対する条件のコレクションを表します。RecordFilter
オブジェクトの Conditions
コレクションに ICondition
インターフェイスを実装するオブジェクトを追加することで条件を定義できます。InfragisticsWPF4.v24.1 アセンブリの Infragistics.Windows.Controls 名前空間は、以下の条件オブジェクトを提供します:
ComparisonCondition - 比較演算子を使用して値を比較する単純な条件。
ComplementCondition - 既存の条件を無効にする条件。
ConditionGroup - 'And' または 'Or' などの論理演算子を使用した条件の組み合わせ。
最後に、レコード フィルターがユーザーのレコードに影響を及ぼすためには、RecordFilter
オブジェクトを適切な RecordFilters
コレクションに追加する必要があります。ルート レベルのレコードについては、 RecordFilterScope プロパティ値に関係なく、RecordFilter
オブジェクトを FieldLayout
オブジェクトの RecordFilters
コレクションに追加する必要があります。子レコードについては、 FieldLayoutSettings オブジェクトの RecordFilterScope
プロパティ値に基づいて、RecordFilter
オブジェクトを適切な RecordFilters
コレクションに追加する必要があります。
たとえば、xamDataPresenter を顧客/注文の階層的なコレクションにバインドして、顧客項目をフィルターする場合、顧客クラス (FieldLayouts
コレクションの最初の FieldLayout
オブジェクト) を表す FieldLayout
オブジェクトの RecordFilters
コレクションに RecordFilter
オブジェクトを追加する必要があります。注文項目をフィルターして、デフォルトの RecordFilterScope
プロパティ値 (iblingDataRecords) を使用する場合、RecordFilter
オブジェクトを子 RecordManager
オブジェクトの RecordFilters
コレクションに追加する必要があります。ExpandableFieldRecord オブジェクトの ChildRecordManager プロパティを使用して子レコード マネージャーにアクセスできます。一方、RecordFilterScope
プロパティを AllRecords
に設定する場合、注文項目 (FieldLayouts
コレクションの 2 番目の FieldLayout
オブジェクト) を表す FieldLayout
オブジェクトの RecordFilters
コレクションに RecordFilter
オブジェクトを追加する必要があります。
以下のコード例は、フィルター条件を追加する方法を示します。
XAML の場合:
<!-- Infragistics.Windows.Controls 名前空間で ComparisonCondition オブジェクトを参照するために以下の XML 名前空間定義が必要です: xmlns:igWindows="http://infragistics.com/Windows" --> <igDP:XamDataPresenter Name="xamDataPresenter1" BindToSampleData="True"> <igDP:XamDataPresenter.FieldLayouts> <igDP:FieldLayout> <igDP:FieldLayout.RecordFilters> <igDP:RecordFilter FieldName="department"> <igDP:RecordFilter.Conditions> <igWindows:ComparisonCondition Operator="Contains" Value="Sales" /> </igDP:RecordFilter.Conditions> </igDP:RecordFilter> </igDP:FieldLayout.RecordFilters> </igDP:FieldLayout> </igDP:XamDataPresenter.FieldLayouts> </igDP:XamDataPresenter>
Visual Basic の場合:
Imports Infragistics.Windows.DataPresenter Imports Infragistics.Windows.Controls ... Dim deptRecordFilter As New RecordFilter With {.FieldName = "department"} Dim salesDeptCondition As New ComparisonCondition(ComparisonOperator.Contains, "Sales") deptRecordFilter.Conditions.Add(salesDeptCondition) Me.xamDataPresenter1.FieldLayouts(0).RecordFilters.Add(deptRecordFilter)
C# の場合:
using Infragistics.Windows.DataPresenter; using Infragistics.Windows.Controls; ... RecordFilter deptRecordFilter = new RecordFilter { FieldName = "department" }; ComparisonCondition salesDeptCondition = new ComparisonCondition(ComparisonOperator.Contains, "Sales"); deptRecordFilter.Conditions.Add(salesDeptCondition); this.xamDataPresenter1.FieldLayouts[0].RecordFilters.Add(deptRecordFilter);