DataSource for Entity Framework for WPF/Silverlight
サーバー側のフィルタ処理
DataSource for Entity Framework > サーバー側のフィルタ処理

一般にサーバーからクライアントに返されるデータは制限する方が望ましいこと、また C1DataSource|tag=C1DataSource_Class では FilterDescriptor コレクションエディタを使用してこれを簡単に実行できることを既に説明しました。次に、サーバー側のフィルタ処理を実行する手段をエンドユーザーに提供する方法について説明します。

他の GUI コントロールでもかまいませんが、たとえば、ユーザーがコンボボックスから Product Category を選択し、それによってサーバーから新しいデータが DataGrid にロードされるとします。

サーバー側のフィルタ処理を実装するには、次の手順に従います。

  1. 簡単な連結|document=WordDocuments\C1DataStudio-WPF.docx;topic=Simple Binding」で使用したプロジェクトに、C1DataSource コンポーネントを含む新しいフォームを追加します。このフォームをプロジェクトのスタートアップフォームにすることで、プロジェクトの実行にかかる時間を短縮することができます。
  2. 前と同様に C1DataSource を確立します。今回は、Categories と Products の2つのビューソースを定義します。ViewSourceCollection で、[追加]ボタンを2回クリックします。EntityViewSourceProperties.EntitySetName|keyword=EntityViewSource.EntitySetName property プロパティの横で、最初のメンバ(0)には「Categories」を、2番目のメンバ(1)には「Products」を入力します。
  3. Value は空のままにします。これは、コンボボックスの選択変更イベントに応答するコードで設定するからです。
  4. 前に示したように、ItemsSource="{Binding ElementName=c1DataSource1, Path=Products}" を使用してグリッドを連結します。
  5. XAML でグリッドの AutoGenerateColumns プロパティを True に設定します。そうしないと、実行時にグリッドに列が何も含まれません。
    <DataGrid AutoGenerateColumns="True"...
  6. コンボボックスには、次の連結を使用します。
    ItemsSource="Binding ElementName=c1DataSource1, Path=Categories}"
    DisplayMemberPath="CategoryName"
    グリッドや他のコントロールと同様に、[プロパティ]ウィンドウの連結デザイナを使用して、リストから連結を選択できます。または、XAML で連結を直接入力できます。
  7. 最後に、コンボボックスの SelectionChanged イベントを処理する次のコードをフォームに追加します。

    Visual Basic
    コードのコピー
    Private Sub comboBox1_SelectionChanged(sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs)
         c1DataSource1.ViewSources("Products").FilterDescriptors(0).Value =
             CType(comboBox1.SelectedValue, Category).CategoryID
         c1DataSource1.ViewSources("Products").Load()
    End Sub
    

    C#
    コードのコピー
    private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        c1DataSource1.ViewSources["Products"].FilterDescriptors[0].Value =
            ((Category)comboBox1.SelectedItem).CategoryID;
    c1DataSource1.ViewSources["Products"].Load();
    }
    
  8. アプリケーションを保存、ビルド、および実行します。コンボボックスでカテゴリを選択します。そのカテゴリに関連する製品がグリッドに表示されます。前回とまったく同様に、グリッド内のデータを編集できます。