首页 > 解决方案 > 可以过滤多个网格视图的数据源吗?

问题描述

我有一个包含 4 个数据网格视图的程序,这些数据网格视图绑定到 1 个数据源。每个 gridview 代表 4 个位置中的 1 个。是否可以单独过滤网格视图上的数据,以便网格视图仅填充针对该网格视图特定位置的结果?我知道数据源的 .Filter 属性,但据我所知,它会在源级别过滤数据,这将限制各个位置的结果,最终只提供 1 个位置的结果,而不是全部 4 个。

标签: vb.netdatagridview

解决方案


我将把建议的内容正式化一点。

当您使用复杂的数据绑定时,例如在设置DataSourcea时DataGridView,您需要使用实现IList接口的对象或实现接口的对象IListSource。顾名思义, anIListSource充当IList.

该类DataTable实现IListSource接口。当您(或您的DataGridView)调用它的GetList方法时,它会返回其DefaultView属性的值,即 a DataView。它DataView是实现的IList。绑定的控件实际上显示了 that 的内容DataView,这就是您能够对网格中的数据进行排序的方式。DataView排序的是,而不是DataTable. 同样,您可以将 设置RowFilterDataView过滤然后数据。

如果您想以多种方式对相同的数据进行排序和/或过滤,那么您不要使用,DefaultView而是创建您自己的DataView对象。如建议的那样,如果您想以四种不同的方式过滤数据,那么您应该明确创建四种不同的方式DataViews,然后将它们绑定到您的网格:

Dim dataView1 As New DataView(myDataTable)
Dim dataView2 As New DataView(myDataTable)
Dim dataView3 As New DataView(myDataTable)
Dim dataView4 As New DataView(myDataTable)

dataGridView1.DataSource = dataView1
dataGridView2.DataSource = dataView2
dataGridView3.DataSource = dataView3
dataGridView4.DataSource = dataView4

然后,您可以RowFilter独立设置这四个属性。


推荐阅读