我正在使用.net 2.0开发Windows应用程序。 UI appl有一个datagrid,数据将从XML文件中填充。 数据网格有500多行。排序功能已实现。但客户仍希望在其中一个列上找到一个查找选项或搜索功能,其中一个文本框用户将输入前3个字母,并且必须在网格中搜索并且必须显示以给定搜索开头的相关行标准。
任何建议请问如何实现这个.... 感谢
答案 0 :(得分:0)
您可以在BindingSource对象中使用Filter选项。
private BindingSource dashBoardBindingSource = new BindingSource();
dashBoardBindingSource.DataSource=<<data source items>>;
dashBoardBindingSource.Filter="Column Name=textbox.text";
datagrid.DataSource = dashBoardBindingSource;
答案 1 :(得分:0)
存储完整的数据集,然后在需要执行过滤器时,创建过滤后的集合并将过滤后的集合绑定到网格。只需将适当的文本更改事件连接到您的过滤器框,调用FilterGridData。当通过多列过滤时,它也可以很好地工作。哦,你不必在这里使用BindingList。使用您想要绑定到网格的任何数据源 - 其核心就是“通过使用LINQ进行过滤来创建过滤后的集合。”
BindingList<Foo> _allFoos;
private void LoadData(IEnumerable<Foo> dataToDisplayInGrid)
{
this._allFoos = new BindingList<Foo>(dataToDisplayInGrid.ToList());
this.FilterGridData(string.Empty);
}
private void FilterGridData(string filterText)
{
BindingList<Foo> filteredList = null;
if (!string.IsNullOrEmpty(filterText))
{
string lowerCaseFilterText = filterText.ToLower();
IList<Foo> filteredItems = this._allFoos.Where(x => (x.Name ?? string.Empty).ToLower().Contains(lowerCaseFilterText)).ToList();
filteredList = new BindingList<Foo>(filteredItems);
}
else
{
filteredList = new BindingList<Foo>(this._allFoos);
}
dataGrid.DataSource = filteredList;
}