C# 如何在DataTable上使用RowFilter查找列不为null且大于/小于某个值的行?

C# 如何在DataTable上使用RowFilter查找列不为null且大于/小于某个值的行?,c#,datagridview,datatable,rowfilter,C#,Datagridview,Datatable,Rowfilter,我正试图筛选一个包含x、y、z坐标值的数据表,每个坐标值在一定范围内。例如,我希望看到x值大于200的行。我的问题是DataTable是从DataGridView读入的,所有字段都被解释为字符串。此外,有几行缺少至少一个x、y或z值,因此我想排除这些值 作为对x值的测试,我尝试了 (dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "[X Value] IS NOT NULL AND CONVERT([X Value]

我正试图筛选一个包含x、y、z坐标值的数据表,每个坐标值在一定范围内。例如,我希望看到x值大于200的行。我的问题是DataTable是从DataGridView读入的,所有字段都被解释为字符串。此外,有几行缺少至少一个x、y或z值,因此我想排除这些值

作为对x值的测试,我尝试了

(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = "[X Value] 
IS NOT NULL AND CONVERT([X Value], 'System.Decimal') > 200.0";
这导致错误消息输入字符串的格式不正确。我假设发生这种情况是因为它试图将空值转换为十进制。当行筛选器不包含[X值]为NOTNULL的一半时,我也会遇到同样的问题


是否可以在单个行筛选器中完成这一切?

否,并确保如果不满足第一个条件,则不计算第二个条件。因此,错误不是由空值引起的,而是很可能由空字符串引起的

把你的测试改成

"[x value] IS NOT NULL AND [x value] <> '' AND CONVERT([x value], 'System.Decimal') > 200.0";

您确定X列中的所有非空值都可以根据您的区域设置转换为十进制吗?您确定DataColumn是需要转换的类型吗?@Steve是的,我知道我的非空值采用可接受的十进制格式啊,我明白了!我一直假设检查[X Value]是否为NULL与检查[X Value]相同,但现在我看到了NULL值和空字符串的区别。我将行过滤器改为TRIM[X Value]并转换[X Value],'System.Decimal'>200.0,这样就行了。谢谢