我有以下代码:
myDataSet.myTable.DefaultView.RowFilter = "Code <> 'X'"
该行执行后,如果将鼠标悬停在
DefaultView
上,我可以看到更新的结果,其中没有行包含“代码”列的 X。但是,当将鼠标悬停在 myDataSet.myTable
上时,表仍然包含 Code = 'X' 的记录。
我需要做什么才能使
myDataSet.myTable
使用应用的过滤器结果进行更新?
嗯,正如所指出的,“视图”实际上是该数据表的另一个“视图”。与对数据库使用 SQL 查询非常相似。该查询的结果是数据库的“视图”。
因此,您可以自由地在数据表上设置“默认”视图,它将过滤到该视图。因此,您可以获得表行数和过滤器行数。
并且,如果您愿意,您可以将结果“复制”到新的表对象中。
此示例展示了这一点:
Dim dtHotels As DataTable
Dim strSQL As String =
"SELECT * FROM tblHotelsA
WHERE Active = 1
ORDER BY HotelName"
dtHotels = MyRst(strSQL)
dtHotels.DefaultView.RowFilter = "[City] = 'Edmonton'"
Dim MyFilterTable As DataTable = dtHotels.DefaultView.ToTable()
Debug.Print($"dtHotels rows = {dtHotels.Rows.Count}")
Debug.Print($"dtHotels view filter rows = {dtHotels.DefaultView.Count}")
Debug.Print($"Filter table (copy) = {MyFilterTable.Rows.Count}")
输出:
dtHotels rows = 16
dtHotels view filter rows = 8
New Filter table (copy) = 8
因此,视图实际上就像针对该数据表的“查询”,并且行计数和原始行仍然存在于该数据表中。