我正在使用collectionviewsource来搜索我的wpf应用程序中的datagrid。我使用实体框架从数据库填充我的数据网格。除搜索功能外,一切正常。我正在使用textchanged事件和collectionviewsource来搜索datagrid itemsource中的文本。发生的事情是我可以进行搜索,datagrid在搜索框中输入时会过滤数据(此处搜索框是文本框),但是当清空搜索框时,数据网格必须填充所有行,但这是我遇到的问题。它显示了最后一个搜索过滤器。这是下面的代码。请帮帮我们..
private void txtSearch_TextChanged(object sender, TextChangedEventArgs e)
{
if (txtSearch.Text != String.Empty)
{
textSearch = sender as TextBox;
filterText = textSearch.Text;
var cv = CollectionViewSource.GetDefaultView(dgDetailedRecordList.ItemsSource);
if (filterText != null)
{
cv.Filter = o =>
{
var emp = o as DetailedReportInventoryTableItems;
return (emp.product_name.ToLower().ToString().Contains(filterText.ToLower().ToString())
|| emp.emp_no.ToLower().ToString().Contains(filterText.ToLower().ToString())
);
};
}
}
}
答案 0 :(得分:2)
问题可能是已分配的过滤器。如果txtSearch.Text
为String.Empty
,则必须重置过滤器。尝试修改代码,如下所示:
private void txtSearch_TextChanged(object sender, TextChangedEventArgs e)
{
var cv = CollectionViewSource.GetDefaultView(dgDetailedRecordList.ItemsSource);
if (txtSearch.Text != String.Empty)
{
textSearch = sender as TextBox;
filterText = textSearch.Text;
if (filterText != null)
{
// Existing filter here
}
}
else
{
cv.Filter = null;
}
}
我还没有对代码进行测试,如果有效,请告诉我。
很少有其他改进注意事项:
.ToLower()
会返回一个字符串,因此无需附加.ToString()
。emp.product_name
的数据类型,则可以在.ToString()
之后使用.ToLower()
。emp.product_name.ToString().ToLower().