首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滤波BindingList

滤波BindingList
EN

Stack Overflow用户
提问于 2019-04-18 13:16:54
回答 1查看 1.7K关注 0票数 2

在C# WinForms中,我有两个DataGrids显示表格数据。首先显示所有行,第二行显示这些行的过滤集。我需要在我的BindingList视图实例上构建过滤视图。更改基础列表后,需要更新此视图。

我尝试用LINQ构建新的BindingList实例,但是当底层myList被更改时,过滤的内容不会被更新。

代码语言:javascript
复制
var filtered = new BindingList<Clip>(myList.Where<Clip>
(
c => c.participant.Contains(id)
).ToList<Clip>());

我该怎么做?谢谢

EN

回答 1

Stack Overflow用户

发布于 2019-04-18 15:09:15

BindingList<T>不支持过滤(至少不支持直接过滤),所以我建议用DataTable代替您的BindingList。DataView支持过滤,过滤后的数据只是同一个DataTable的自定义子集。

在本例中,两个BindingSource类用于将相同的DataTable绑定到两个DataGridView控件。

其中一个BindingSource类使用DataView.RowFilter属性绑定到DataTable的一个过滤的DataView.RowFilter,该属性是一个接受类SQL命令子集的表达式

在这里,第二个DataGridView.DataSource被设置为将其DataSource链接到已过滤的DataView的BindingSource。

过滤器是使用第二列("Value A1")的一个特定值(Column1)定义的。

在可视化示例中可以看到,两个DataGridView控件在两个DataGridViews的单元格值发生更改时更新其单元格值。

另外,筛选器在第二个DataGridView上是活动的:当筛选的列值发生变化时,行被过滤。

若要测试此行为,请向表单中添加2个DataGridView控件,添加一个按钮(此处命名为btnBind),并使用DataGridView处理程序订阅Click事件。

代码语言:javascript
复制
private BindingSource dgvBindingSource1 = null;
private BindingSource dgvBindingSource2 = null;
private DataTable dt = null;

private void btnBind_Click(object sender, EventArgs e)
{
    FillData(3, 3);
    dgvBindingSource1 = new BindingSource(dt, null);

    DataView dv = dt.AsDataView();
    dv.RowFilter = "Column1 = 'Value A1'";
    dgvBindingSource2 = new BindingSource(dv, null);

    dataGridView1.DataSource = dgvBindingSource1;
    dataGridView2.DataSource = dgvBindingSource2;
}

private void FillData(int cols, int rows)
{
    dt = new DataTable("TestTable");
    dt.Columns.AddRange(Enumerable.Range(0, cols)
              .Select(i => new DataColumn("Column" + i.ToString(), typeof(string))).ToArray());

    for (int r = 0; r < rows; r++) {
        dt.Rows.Add(Enumerable.Range(0, cols)
               .Select(n => $"Value {(char)('A' + r)}" + n.ToString()).ToArray());
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55746869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档