嘿,我也对此感兴趣,但我认为我发现这是不可能的(至少在当前的 ASP Net 功能集中)。我发现的最有用的 RowFilter 资源在这里:http ://www.csharp-examples.net/dataview-rowfilter/
在该站点中,最有用的花絮是您可以进行 SUM、COUNT、MIN、MAX、AVG(平均)、STDEV(统计标准差)和 VAR;以及 CONVERT、LEN、ISNULL、IIF、TRIM、SUBSTRING。
我对过滤器的问题是,当您的基础值为 1.23456 时,您只显示第一个 sig 数字(因此它会显示 1.23),然后尝试过滤值 = 1.23 没有结果的地方。理想情况下,ROUND 功能将允许我将行值四舍五入到我感兴趣的 sig-digs,但我也无法找到实现此目的的合理方法。
祝你好运,如果我偶然发现任何事情,我会告诉你的。
编辑:实际上,在我写完这篇文章之后,我想到了一种不那么笨拙的方法。一种可行且并不完全糟糕的方法是将两个值乘以 10^x,然后转换为整数。下面的示例代码:
int mult = Convert.ToInt32(Math.Pow(10.0, _defaultDecimalSignificantDigits)); //in your example 2
dv.RowFilter = String.Format("CONVERT({0}*{3},System.Int32){1}CONVERT({2}*{3},System.Int32)", name, expression, value, mult); //where "name" is your column name, "expression" is =, <>, etc, and "value" is the entered row filter value
这些值不会在显示中相乘,而只会在过滤器逻辑中相乘。因此,如果您的分数是 14.998,则将您的过滤器乘以 1000(为您的过滤器和值提供 14,998 的值)。
这显然基于您要舍入的小数位数有限制,但在您的 2 舍入示例中,您只需将两者乘以 100。使用足够大的数字和/或足够的小数位四舍五入,您也可能溢出 Int32 边界,并且可能需要 Int64。