【问题标题】:Filter DataGridView筛选 DataGridView
【发布时间】:2012-11-07 17:17:20
【问题描述】:

我已经在互联网上搜索了我的问题的解决方案,我和我的 studygrp 正在制作一个从 classLibrary 获取信息的 datagridview。所有这些都有效,但现在我们必须过滤它,但我只能通过 bindingsource 找到,但这不是我的想法。我只想要一个简单的过滤器,以便您可以在文本框中输入一些内容,如果它包含该信息,它会在 datagridview 上显示。我试过了:

((DataTable)dataGridView1.DataSource).DefaultView.RowFilter = "FromColumn like '%" + textBox1.Text + "%'";

但它不像我想要的那样工作嗯......任何可以提供帮助的人吗?

【问题讨论】:

    标签: c# winforms datagridview


    【解决方案1】:

    试试 BindingSource。它提供了良好的广泛过滤设施

    BindingSource bs = new BindingSource();
    bs.DataSource = dataGridView1.DataSource;
    bs.Filter = "yourColumnName like '%" + textBox1.Text + "%'";
    dataGridView1.DataSource = bs;
    

    【讨论】:

    • thnx 的答案:D 但我得到 System.NullReferenceException 未处理消息 = objectReference 没有被赋予对象的实例
    • 再次感谢 sami 为您的回答:D 现在它比 xD 之前效果更好,但现在的问题是当我搜索时它只给我一个空白行?你知道那是什么吗?
    • 仍然添加了一个空白行,有点令人沮丧;/我尝试了一切,但仍然没有结果
    • @Ra91 我只是在 Visual Studio 中测试后复制粘贴它。请分享您之前(过滤之前)的代码。所以我很高兴解决你的问题。然而,它只是过滤数据绑定网格视图的正确答案。我不确定您是否真的将 datagridview 与数据表正确绑定。请分享一下
    • 也可以使用 BindingSource bs = (BindingSource)dataGridView1.DataSource; bs.Filter = ...
    【解决方案2】:

    试试这个:

    DataView dv = ((DataTable)dataGridView1.DataSource).DefaultView;
    dv.RowFilter = "FromColumn like '%" + textBox1.Text + "%'";
    dataGridView1.DataSource = dv;
    

    【讨论】:

    • 我应该如何处理 dataGridView1.DataBind();?它告诉我它不包含 dataBind 的定义?
    • 我们在 3 层架构中编程,用于设计的 Windows 窗体,用于处理信息的逻辑层和用于获取数据并保存数据的数据层,因此 datagridview 由 dataGridView1.DataSource = logic.LoadMessages() 绑定;从数据层加载消息
    • System.InvalidCastException 未处理 消息=未成功将 System.Collections.Generic.List`1[BegEntities.Email] 类型的对象转换为 System.Data.DataTable 类型
    【解决方案3】:

    我发现这最适合我的需求:

    您要在网格中显示的数据存储在 BindingList 中(支持 INotifyPropertyCchanged,当您更新列表时非常整洁......) 所以在你定义这个 BindingList 的地方:

    public MyDataList = new BindingList<MyDataItem>();
    

    将其分配给网格的数据源:

     myDataGrid.DataSource = MyDataList; 
    

    当“过滤按钮”被按下时,或者你想要做什么事件:

    myDataGrid.DataSource = MyDataList.Where(ln => ln.propertyname.Contains(textBoxFilter.Text).ToList();
    

    重置过滤器时只需设置原始源

    MyDataGrid.DataSource = MyDataList
    

    希望对你有帮助,问候

    【讨论】:

    • 我不知道您的代码中的 ln 是什么,但您的回答让我找到了另一个答案,这个答案一直让我难以理解。所以,谢谢!
    • ln 只是 linq 表达式(方法语法)的占位符/变量名,您可以使用任何您想要的东西。请参阅:docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
    猜你喜欢
    • 2014-02-12
    • 2016-05-13
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 2011-11-21
    • 2020-07-22
    相关资源
    最近更新 更多