如果是数据表的默认视图,如何在其itemsource时过滤数据网格

时间:2012-07-11 03:28:27

标签: wpf datagrid filter datatable

我正在尝试过滤数据网格,以仅显示包含搜索字词的行。首先将数据库中的数据加载到数据表中,然后将datagrid的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;

结果是,如果匹配的行是第二个,我将得到两行但是空值。行中的所有数据都无法显示。所以数据在IcollectionView中,但它没有显示出来。有任何想法吗?我真的很感激。只是为了澄清,在我添加此过滤器功能之前,我只使用

          dataGrid.ItemSource = dataTable.DefaultView;

一切正常。谢谢。

0 个答案:

没有答案