在C#windows appl中的datagrid列上实现搜索功能

时间:2012-08-09 10:47:24

标签: c# datagridview

我正在使用.net 2.0开发Windows应用程序。 UI appl有一个datagrid,数据将从XML文件中填充。 数据网格有500多行。排序功能已实现。但客户仍希望在其中一个列上找到一个查找选项或搜索功能,其中一个文本框用户将输入前3个字母,并且必须在网格中搜索并且必须显示以给定搜索开头的相关行标准。

任何建议请问如何实现这个.... 感谢

2 个答案:

答案 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;
    }