首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataView -反向RowFilter条件

DataView -反向RowFilter条件
EN

Stack Overflow用户
提问于 2015-09-29 00:36:14
回答 1查看 271关注 0票数 0

我有一个用RowFilter实现的带有可定制过滤器的GridView。对于每一列,用户可以指定过滤条件。一旦所有想要的条件都设置好了,他点击“应用过滤器”。所有列的条件将组合在一起,以创建DataView的RowFilter表达式。

现在,我想实现一个“反转”选项(一个复选框),它将简单地反转DataView的RowFilter条件。我的第一个想法是简单地说:

代码语言:javascript
复制
RowFilter = NOT (original condition)

就是这样了。显然不是,因为有空值的字段。例如,如果筛选器具有条件StatusID = 10,并且某些记录的StatusID值为空值,则条件NOT (StatusID = 10)将不包括这些记录(根据我的测试)。对于一个字段,我可以很容易地进行更改以说明NULL,但是,当条件中组合了几个字段时,情况就会变得更加复杂。

我的问题是:当涉及到空值的字段时,有没有一种聪明的方法来全局逆转RowFilter条件,或者我必须为每个单独的字段测试空值?

EN

回答 1

Stack Overflow用户

发布于 2015-09-29 00:55:29

如果我正确理解了您的问题,您希望获得未过滤的结果集的其余部分。我知道没有直接的NOT函数,正如您在伪代码中所显示的那样。您可以做的是首先根据过滤器获取数据视图,这可能您已经准备好了,如下所示:

代码语言:javascript
复制
DataView dv= //Whatever filter you use

然后使用DataView.ToTable()将其转换为数据表

接下来,您可以很容易地找到这两个datatable之间的区别,如下所示

代码语言:javascript
复制
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();

这是另一个表,给出了相反的结果。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32827808

复制
相关文章

相似问题

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