在C#windows应用程序中在datagrid列上实现搜索功能

在C#windows应用程序中在datagrid列上实现搜索功能,c#,datagridview,C#,Datagridview,我正在使用.NET2.0开发一个windows应用程序。UI appl有一个datagrid,数据将从XML文件填充。 数据网格有500多行。已实现排序功能。但客户仍然希望在其中一列上有一个查找选项或搜索功能,其中有一个文本框,用户要在其中输入前3个字母,它必须在网格中搜索,并且必须显示以给定搜索条件开头的相关行 任何建议,请如何实施这。。。。 谢谢您可以在BindingSource对象中使用过滤器选项 private BindingSource dashBoardBindingSource =

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

任何建议,请如何实施这。。。。
谢谢

您可以在BindingSource对象中使用过滤器选项

private BindingSource dashBoardBindingSource = new BindingSource();

dashBoardBindingSource.DataSource=<<data source items>>;
dashBoardBindingSource.Filter="Column Name=textbox.text";
datagrid.DataSource = dashBoardBindingSource;
private BindingSource仪表板BindingSource=new BindingSource();
dashBoardBindingSource.DataSource=;
dashBoardBindingSource.Filter=“Column Name=textbox.text”;
datagrid.DataSource=dashBoardBindingSource;

存储完整的数据集合,然后在需要执行筛选时,创建筛选集合并将筛选集合绑定到网格。只需将适当的文本更改事件连接到过滤器框,调用FilterGridData即可。当通过多列进行过滤时,它也能很好地工作。哦,您不必在这里使用BindingList。使用您想要绑定到网格的任何数据源—其核心就是“通过使用LINQ进行过滤来创建过滤后的集合”

bindingslist\u allFoos;
私有void加载数据(IEnumerable dataToDisplayInGrid)
{
这是._allFoos=newbindingslist(dataToDisplayInGrid.ToList());
this.filtergridata(string.Empty);
}
私有void filtergridata(字符串filterText)
{
BindingList filteredList=null;
如果(!string.IsNullOrEmpty(filterText))
{
字符串lowerCaseFilterText=filterText.ToLower();
IList filteredItems=this.\u allFoos.Where(x=>(x.Name??string.Empty).ToLower().Contains(lowerCaseFilterText)).ToList();
filteredList=新绑定列表(filteredItems);
}
其他的
{
filteredList=新绑定列表(this.\u allFoos);
}
dataGrid.DataSource=filteredList;
}
    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;
    }