嘿,我也對此感興趣,但我認爲我發現這是不可能的(至少在目前的ASP網絡功能集)。我找到的最有用的RowFilter資源是這樣的:http://www.csharp-examples.net/dataview-rowfilter/
在該網站中,最有用的小技巧是可以執行SUM,COUNT,MIN,MAX,AVG(平均值),STDEV(統計標準偏差)和VAR ;以及CONVERT,LEN,ISNULL,IIF,TRIM,SUBSTRING。
我的問題與過濾器是當你有一個底層值1.23456,並且你只顯示第一個數字(所以它會顯示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可能是必需的。
謝謝您的回答亞當。這是一個恥辱,它不能做得更優雅,但你的想法乘以10^x至少是一個辦法。Int64可能是避免溢出的一種更安全的方式。我會試一試你的想法。 – mikehamer