本帖最后由 hysoka 于 2010-08-18 18:52:32 编辑

解决方案 »

  1.   


    我再详细描述下:
    SqlDataSource控件的FilterParameters属性中设置三个参数,分别绑定到两个textbox和一个dropdownlist,通过这三个控件中的值作为过滤条件来对SDS的DataSet查询进行过滤,并在GridView中实时体现出来。过滤表达式如下形式:FilterExpression="a1 like '%{0}%' and a2 like '%{1}%' and a3 = '{2}'";那么默认情况下是不对查询进行任何过滤的,也就是三个控件中的值都为空。那么现在出现的情况是,三个控件中的值有任何一个为空,整个过滤条件都不发挥作用,而我的希望是任何一个控件中的值被我输入了过滤条件后都能有相应的变化
      

  2.   

    好久不弄asp.net了,不过我感觉:FilterExpression="a1 like '%{0}%' and a2 like '%{1}%' and a3 = '{2}'";这里好像有点问题,你首先判断是否为空值,不为空的时候,再作为查询条件,否则的话,就不作为查询条件
    如果单纯从Sql来说,我是那样理解的,不知道在这里有没有帮助
      

  3.   

    问题是自己解决了,lyy_0814给的思路很对路,谢谢啦。在别的论坛我已写出了解决办法,直接转过来。同时还有一事不明,如下: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我不熟)?