filterexpression返回“错误”结果

时间:2014-02-26 14:48:42

标签: c# asp.net

我有一个filterexpression,可以让您从gridview过滤结果。

我有两个下拉列表(filterexpression中有5个和6个,其余的是文本框并且工作正常),您可以在其中选择特定的预定义范围来过滤结果。

我的filterexpression如下:

FilterExpression="CompanyName LIKE '{0}%' AND CityName like '{1}%' AND Convert(Zipcode, 'System.String') like '{2}%' AND Convert(ActionID, 'System.String') like '{4}%' AND Convert(Employees, 'System.String') like '{5}%' or (Convert(Zipcode, 'System.String') >= '{2}%' AND Convert(Zipcode, 'System.String')  <= '{3}%') or (Convert(Employees, 'System.String') >= '{5}%' AND Convert(Employees, 'System.String')  <= '{6}%')"> 

我的问题是员工人数。在我有99,199,499,999和1000的员工人数的可用值中。

如果我选择第一个值为99而第二个值为199,我也会得到拥有999名员工的公司的结果,因为它包含99个。但是这在逻辑上不应该发生,因为999是选定的范围。

知道如何解决这个问题吗?

编辑:忘记提及,我的控制参数中有ConvertEmptyStringToNull = false。所以我不必填写每个文本框来获得结果。

关于转换,这是我必须要做的事情,否则它不会在gridview中显示任何数据,除非我指定过滤器。

1 个答案:

答案 0 :(得分:3)

如果您添加一些换行符,您会看到正在发生的事情

CompanyName LIKE '{0}%'
AND CityName like '{1}%' 
AND Convert(Zipcode, 'System.String') like '{2}%' 
AND Convert(ActionID, 'System.String') like '{4}%'
AND Convert(Employees, 'System.String') like '{5}%' 

or 
(
    Convert(Zipcode, 'System.String') >= '{2}%' 
    AND Convert(Zipcode, 'System.String')  <= '{3}%'
) 
or 
(
    Convert(Employees, 'System.String') >= '{5}%' 
    AND Convert(Employees, 'System.String')  <= '{6}%'
)

基本上,如果您的第一个块(具有四个AND)匹配,则会显示一条记录,即使所有OR块都不匹配。

仔细看AND Convert(Employees, 'System.String') like '{5}%',这意味着

 AND Employees LIKE '99%'

对于999也是如此。我建议您从第一个块中删除Emplyee过滤器。

<强>更新

还有另一个问题,在您的OR表达式中,您使用带有字符串的>=<=运算符。我无法预测该如何评估,但我建议您将Employees转换为int并删除最后的%

or 
(
    Convert(Employees, 'System.Int32') >= {5}
    AND Convert(Employees, 'System.Int32')  <= {6}
)