按布尔值过滤 DataGridView

Posted

技术标签:

【中文标题】按布尔值过滤 DataGridView【英文标题】:Filter DataGridView by boolean 【发布时间】:2017-06-25 00:29:56 【问题描述】:

我正在尝试按布尔值(包含复选框的列)过滤 DataGridView。

我查找了几个解决方案,但没有一个对我有用。

这个看起来简单而逻辑,但它只是删除了所有条目。

            DataView dv = new DataView();
            dv.RowFilter = "Finished = 0";
            dgvMain.DataSource = dv;

列的标题文本为“Finished”,名称为“Finished”。

我在这里做错了什么?

【问题讨论】:

您是否已经尝试在过滤之前设置数据源? 我不确定您的实际意思。 尝试交换代码的第 2 行和第 3 行。 不幸的是,这不起作用 "Finished = false" 【参考方案1】:

如果您没有为您的 DataSource 使用 DataTable(您的评论为 List),那么我建议您切换到它,以便复选框与 DataGridView 中的每个对象更紧密地关联。然后,您可以通过将 DataTable 放入 BindingSource(具有 Filter 属性)来过滤 DataTable,然后将该绑定用作 DataGridView 的 DataSource。

public partial class MainForm : Form 

    public MainForm() 
        InitializeComponent();
        DataTable dt = new DataTable();

        // change string to whatever your object type is
        dt.Columns.Add(new DataColumn("object column", typeof(string)));
        dt.Columns.Add(new DataColumn("CheckBoxColumn", typeof(bool)));

        dt.Rows.Add("row1", 1);
        dt.Rows.Add("row2", 0);
        dt.Rows.Add("row3", 1);
        dt.Rows.Add("row4", 1);
        dt.Rows.Add("row5", 0);

        BindingSource binding = new BindingSource();
        binding.DataSource = dt;

        dataGridView1.DataSource = binding;
    

    private void filterDGV(string rowFilter)
    
        BindingSource source = (BindingSource)dataGridView1.DataSource;
        source.Filter = rowFilter;
    

    private void FilterToCheckedRows_Click(object sender, EventArgs e)
    
        filterDGV("CheckBoxColumn = 1");
    

    private void FilterToUncheckedRows_Click(object sender, EventArgs e)
    
        filterDGV("CheckBoxColumn = 0");
    

【讨论】:

我得到“无法将'System.Collections.Generic.List`1[Engine.Book]'类型的对象转换为'System.Data.DataView'。”因为 DataGridView 实际上是绑定到一个 List 上的。 @Smarc 我的回答对你有帮助吗?

以上是关于按布尔值过滤 DataGridView的主要内容,如果未能解决你的问题,请参考以下文章

使用 ComboBox 作为查询条件 - 布尔值

Java过滤器不能返回布尔值[重复]。

如何在搜索栏中按布尔字段过滤 - django

根据布尔值列表过滤列表

Pandas 按功能过滤数据帧行

为啥当值为假时我不能传递过滤数据(它是布尔值)