FlexGrid for UWP
データのフィルタ処理
C1FlexGrid の使い方 > データのフィルタ処理

C1CollectionView インタフェースは、Filter プロパティを使用したデータのフィルタ処理をサポートします。Filter プロパティは、コレクション内の各項目に対して呼び出されるメソッドを指定します。このメソッドが true を返す場合、その項目はビューに含まれます。このメソッドが false を返す場合、その項目はフィルタ処理されて非表示になります。この種類のメソッドは、述語メソッドです。

この ComponentOne のサンプルに付属する FlexGridSamples ソリューションには、ユーザーが検索する値を入力する TextBox コントロールとタイマーで構成される SearchBox コントロールが含まれています。このタイマーは、検索する値をユーザーが入力する際に、1文字ごとにフィルタが適用し直されることがないように、短時間の遅延を提供します。

ユーザーが入力を停止すると、このタイマーが次のコードを使用して動作し、フィルタを適用します。

C#
コードのコピー
bool Filter(object item)
{
 // 検索テキストを取得します
 var srch = _txtSearch.Text;

 // テキストがない場合は、すべての項目を表示します
 if (string.IsNullOrEmpty(srch))
 {
 return true;
 }

 // 指定されたプロパティのいずれかにこのテキストが含まれている項目を表示します
 foreach (PropertyInfo pi in _propertyInfo)
 {
 var value = pi.GetValue(item, null) as string;
 if (value != null && value.IndexOf(srch, StringComparison.OrdinalIgnoreCase) > -1)
 {
 return true;
 }
 }

 // この項目を除外します...
 return false;
}

boolean 関数を使用して Filter プロパティの値を設定していることに注意してください。

この関数は、項目をパラメータとして受け取り、オブジェクトの指定されたプロパティの値を取得し、オブジェクトのいずれかのプロパティに検索対象の文字列が含まれる場合は true を返します。

たとえば、オブジェクトの型が "Song" であり、指定されたプロパティが "Title"、"Album"、および "Artist" である場合、この関数は、曲のタイトル、アルバム、またはアーティスト内に検索対象の文字列が見つかった場合に true を返します。これは、強力で使いやすい検索メカニズムであり、Apple の iTunes アプリケーションで使用されているメカニズムに似ています。

フィルタが適用されると、グリッド(および C1CollectionView オブジェクトに連結されているその他すべてのコントロール)にはフィルタの結果が直ちに反映されて、フィルタによって選択された項目のみが表示されます。次のコードは、IC1CollectionViewのFilterプロパティを使用して曲をフィルタリングするために使用されます。

C#
コードのコピー
var view = View as C1.Xaml.IC1CollectionView;
if (view != null)
{
  view.Filter = Filter;
  view.Refresh();
}

フィルタ処理とグループ化は、組み合わせて使用しても適切に機能することに注目してください。次の図に、非常に大きな曲のリストにフィルタが適用されている様子を示します。

この図は、フィルタが "Water" という単語に設定された際に取得したものです。フィルタは、すべてのフィールド(song、album、artist)で一致を検索します。このため、"Creedence Clearwater Revival" の曲はすべて自動的に含まれます。