我有一个用RowFilter实现的带有可定制过滤器的GridView。对于每一列,用户可以指定过滤条件。一旦所有想要的条件都设置好了,他点击“应用过滤器”。所有列的条件将组合在一起,以创建DataView的RowFilter表达式。
现在,我想实现一个“反转”选项(一个复选框),它将简单地反转DataView的RowFilter条件。我的第一个想法是简单地说:
RowFilter = NOT (original condition)就是这样了。显然不是,因为有空值的字段。例如,如果筛选器具有条件StatusID = 10,并且某些记录的StatusID值为空值,则条件NOT (StatusID = 10)将不包括这些记录(根据我的测试)。对于一个字段,我可以很容易地进行更改以说明NULL,但是,当条件中组合了几个字段时,情况就会变得更加复杂。
我的问题是:当涉及到空值的字段时,有没有一种聪明的方法来全局逆转RowFilter条件,或者我必须为每个单独的字段测试空值?
发布于 2015-09-29 00:55:29
如果我正确理解了您的问题,您希望获得未过滤的结果集的其余部分。我知道没有直接的NOT函数,正如您在伪代码中所显示的那样。您可以做的是首先根据过滤器获取数据视图,这可能您已经准备好了,如下所示:
DataView dv= //Whatever filter you use然后使用DataView.ToTable()将其转换为数据表
接下来,您可以很容易地找到这两个datatable之间的区别,如下所示
var rowsOnlyInDt1 = dt1.AsEnumerable().Where(r => !dt2.AsEnumerable()
.Any(r2 => r["col1"].Trim().ToLower() == r2["col1"].Trim().ToLower() && r["col2"].Trim().ToLower() == r2["col2"].Trim().ToLower()));
DataTable result = rowsOnlyInDt1.CopyToDataTable();这是另一个表,给出了相反的结果。
https://stackoverflow.com/questions/32827808
复制相似问题