2017-01-17 6 views
0

datagridのItemsSourceをデータビューの「DefaultView」として設定しています。DataTableをItemSourceとして使用してWPF Datagridをフィルタリングすると例外が発生する

フィルタリングのためにページにテキストボックスがあります。テキストボックスにテキストを入力すると、DataGridの "Filter"が更新されますが、NotSupportedExceptionがスローされます。 "指定されたメソッドはサポートされていません。"私は何が間違っているのかよくわからない。ここで

は、私はDataTableのを作成する私のコードです:

var dt = new DataTable(); 
     templates[0].FieldList[0].Items.Sort(); 

     foreach (var tag in templates[0].FieldList[0].Items) 
     { 
      DataColumn col = new DataColumn() { ColumnName = tag.Name }; 
      dt.Columns.Add(col); 
     } 

     foreach (var temp in templates) 
     { 
      DataRow row = dt.NewRow(); 

      foreach (var tag in temp.FieldList[0].Items) 
      { 
       if (dt.Columns.Contains(tag.Name)) 
        row[tag.Name] = tag.TagValue; 
      } 
      dt.Rows.Add(row); 
     } 

     return dt; 

私はデータグリッドのフィルタを設定する場所それから私は、単にそのデータテーブルの「[既定」

にグリッドのItemsSourceプロパティを設定します。ここです:

private void SearchText_TextChanged(object sender, TextChangedEventArgs e) 
    { 
     LookUpDataGrid.Items.Filter = TextFilter; 
    } 

は次にここに "TextFilter" 方法です3210

+1

[docs](https://msdn.microsoft.com/en-us/library/system.windows.controls.itemcollection.filter(v = vs.110).aspx)には次のように記載されています:CanFilterプロパティを使用する現在の実装が、このプロパティにnull以外の値を割り当てる前にフィルタリングをサポートしているかどうかをテストします。*バインドできるものすべてがフィルタリング可能ではないことを示唆しています。 –

+0

私はちょうどtextchangedにフィルタを設定する前にそれを追加し、あなたは正しいです。それは "偽"です。 これは、おそらく、アイテムとFieldListの複合プロパティに基づいて動的オブジェクトを生成し、データテーブルを作成するのではなくそのコレクションにバインドする必要があるようです。 –

+0

あなたはコレクションビューソースを見たいかもしれません –

答えて

0

ICollectionViewインターフェイスのFilterプロパティを使用してDataTableをファイリングすることはできません。代わりに、例えば、データビューののRowFilterプロパティを使用する必要があります。:

DataView dv = LookUpDataGrid.ItemsSource as DataView; 
if(dv != null) 
{ 
    dv.RowFilter = "n = 1"; //where n is a column name of the DataTable 
} 

ものDataView内のアイテムの種類がExpandoObjectことはありません。それは常にDataRowViewなので、TextFilterメソッドの実装はとにかく動作しません。

おそらく、ItemsSourceをDataView以外のもの、たとえばIEnumerable<ExpandoObject>に設定することを検討してください。

関連する問題