0

検索語を含む行のみを表示するようにデータグリッドをフィルタリングしようとしています。データベースからのデータは最初にデータテーブルにロードされ、次にデータグリッドの itemSource がデータテーブルとして設定されます。オンラインで見つけたすべてのフィルター メソッドでは、データを I CollectionView に変更する必要があります。現在のコードを使用しました

    List<DataRow> list = dataTable.AsEnumerable().ToList();                               
    ICollectionView view = CollectionViewSource.GetDefaultView(list);
    dataGrid.ItemsSource = view;                
    if (view != null)                
    {                    
         view.Filter = delegate(object o)                   
         {
               var row = o as DataRow;
               for (int j = 0; j < dataTable.Columns.Count; j++)                     
               {
                    string data = row.ItemArray[j].ToString();                            
                    if (data != null)                            
                    {                               
                        if (data.Contains(SearchBox.Text))                                   
                             return true;                           
                    }                        
                }                        
             return false;                   
         };

                dataGrid.ItemsSource = view;

その結果、一致した行が 2 番目の場合、2 行が残りますが、値は空白になります。行内のすべてのデータを表示することはできません。したがって、データは IcollectionView にありますが、表示されません。何か案は?本当に感謝しています。明確にするために、このフィルター関数を追加する前に、使用するだけです

          dataGrid.ItemSource = dataTable.DefaultView;

すべて正常に動作します。ありがとうございました。

4

0 に答える 0