通过布尔值过滤 DataGridView

问题描述 投票:0回答:2

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

我查找了几种解决方案,但没有一个适合我。

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

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

该列的标题文本为“已完成”,名称为“已完成”。

我在这里做错了什么?

c# datagridview filter dataview rowfilter
2个回答
0
投票

如果您没有使用 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");
    }
}

0
投票

对于过滤的数据库数据,我遇到同样的错误。我在代码过滤器文本中解决了这个问题,就像那样。

dv.RowFilter = "([Finished] IN ('False'))";
dgvMain.DataSource = dv;
© www.soinside.com 2019 - 2024. All rights reserved.