DataView行过滤

Rob*_*ert 5 c# wpf c#-4.0

我有两个DataView我想要排序,在dgtest1我试图为包含a Typeid != 25和dgtest2 的数据的例外我试图只显示数据在哪里Typeid == 25.

当我单步执行代码时,我会说错误

"无法解释令牌'!' 在第6位".

有人能告诉我如何正确使用字符串行过滤器吗?

参数是(数据表表,字符串RowFilter,字符串排序,DataViewRowState)

dgtest1.ItemsSource = new DataView(dttest1, "Typeid!= 25", "", DataViewRowState.CurrentRows);
dgtest2.ItemsSource = new DataView(dttest1, "Typeid == 25", "", DataViewRowState.CurrentRows);
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 6

在第一个Dataview构造函数中用于RowFilter表达式的正确语法是

dgtest1.ItemsSource = new DataView(dttest1, "Typeid <> 25", "", DataViewRowState.CurrentRows);
                                                    ^^ 
Run Code Online (Sandbox Code Playgroud)

在第二个你需要使用

dgtest2.ItemsSource = new DataView(dttest1, "Typeid = 25", "", DataViewRowState.CurrentRows);
Run Code Online (Sandbox Code Playgroud)

DataView构造函数中用于RowFilter参数的语法与DataColumn 的属性Expression使用的语法相同,它与C#的等于运算符不同

编辑在下面发表评论.如果Typeid是text数据类型的数据库字段,那么您需要将RowFilter中使用的值括在单引号之间

dgtest1.ItemsSource = new DataView(dttest1, "Typeid <> '25'", "", DataViewRowState.CurrentRows);
dgtest2.ItemsSource = new DataView(dttest1, "Typeid = '25'", "", DataViewRowState.CurrentRows);
Run Code Online (Sandbox Code Playgroud)

然而,这似乎有点奇怪.如果Typeid字段包含数字,则应将其定义为numeric数据类型.