我正在尝试按bool值(包含Checkboxes的列)过滤DataGridView。
我查了几个解决方案,没有一个对我有效。
这个看起来很简单和逻辑,但它只是删除了所有条目。
DataView dv = new DataView();
dv.RowFilter = "Finished = 0";
dgvMain.DataSource = dv;
Column的标题文本为“Finished”,名称为“Finished”。
我在这里做错了什么?
答案 0 :(得分:0)
如果您没有为DataSource使用DataTable(您的评论显示List),那么我建议您切换到它,以便复选框与DataGridView中的每个对象更紧密地关联。然后,您可以通过将DataTable放入BindingSource(具有Filter属性),然后将该绑定用作DataGridView的DataSource来过滤DataTable。
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");
}
}