谢谢“bygg”版主,你的方法很奏效,同时我刚刚也找出了出现问题的根源,在此一并公布以供大家参考。
SqlDataSource有个bool属性CancelSelectOnNullParameter:如果设为True,在执行Select时,任意一个查询条件参数值为Null时跳过整个Where子句;
FilterParameters属性集合中的任意参数值中有这样一个bool属性ConvertEmptyStringToNull,并且默认值为True:顾名思义很容易理解,当给定的参数值为空串时,转换它为Null
FilterParameters属性集合中的任意参数值中还有个DefaultValue:参数值为Null时使用默认值
那么问题看似是找到了,任选一个解决方案吧:
1.将CancelSelectOnNullParameter设为False?可惜不行,一点效果也没有。是因为这个参数只能负责SelectCommand,Filter机制下CancelSelectOnNullParameter默认即为True? or VS2010目前版本存在Bug? 以上猜测就不得而知了。
2.将ConvertEmptyStringToNull设为False?这样未设置过滤值的参数会传一个空串而不是Null,过滤条件将会执行。看似完美的解决方案,可惜有局限性,如果FilterExpression中使用如a1='{0}'这种格式,实际过滤条件就变为a1='',那你就只能查到字段a1为空串的情况了;你说用是like?也不完满,like ''与=''实际效果一样的;要想用这种解决办法,你只能保证你的过滤格式形如like '%{0}%',至少要带一个‘%’。
3.将ConvertEmptyStringToNull设为True,并设置默认为'%';与方法2类似,但可以支持like '{0}'这样的格式。
4.再加上版主提供的“*”默认值方法,用法同方法3,暂列为第4种方法。
现在对版主的方法有一个疑问:“*”值是什么?我确定不是Sql中的通配符,不知是.NET提供的?还是C#?还是LINQ(LINQ我不熟)?
[
本帖最后由 hysoka 于 2010-8-19 17:25 编辑 ]