0

我正在尝试为它们中的每一个过滤一定范围内的 x、y、z 坐标值的 DataTable。例如,我想查看 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 Value] IS NOT NULL一半时,我会遇到同样的问题。

是否可以在单个 RowFilter 中完成所有这些操作?

4

1 回答 1

1

不,AND 确保如果不满足第一个条件,则不评估第二个条件。所以错误不是由空值引起的,而是很可能是由空字符串引起的。

只需将您的测试更改为

"[x value] IS NOT NULL AND [x value] <> '' AND CONVERT([x value], 'System.Decimal') > 200.0";
于 2019-09-09T22:14:04.870 回答