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