我正在使用 .net 2.0 开发 Windows 应用程序。UI 应用程序有一个数据网格,数据将从 XML 文件中填充。数据网格有超过 500 行。排序功能已实现。但是客户仍然希望在其中一个带有文本框的列上具有查找选项或搜索功能,用户将在其中输入前 3 个字母,并且它必须在网格中搜索并且必须显示以给定搜索开头的相关行标准。
任何建议请如何实施....谢谢
我正在使用 .net 2.0 开发 Windows 应用程序。UI 应用程序有一个数据网格,数据将从 XML 文件中填充。数据网格有超过 500 行。排序功能已实现。但是客户仍然希望在其中一个带有文本框的列上具有查找选项或搜索功能,用户将在其中输入前 3 个字母,并且它必须在网格中搜索并且必须显示以给定搜索开头的相关行标准。
任何建议请如何实施....谢谢
您可以在 BindingSource 对象中使用 Filter 选项。
private BindingSource dashBoardBindingSource = new BindingSource();
dashBoardBindingSource.DataSource=<<data source items>>;
dashBoardBindingSource.Filter="Column Name=textbox.text";
datagrid.DataSource = dashBoardBindingSource;
存储完整的数据集合,然后在需要执行过滤器时,创建过滤器集合并将过滤器集合绑定到网格。只需将适当的文本更改事件连接到您的过滤器框,调用 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;
}