asp.net:用了一个数据集,数据集中有一个查询方法GetData作为objectdatasource的selectmethod,listview使用该objectdatasource作为数据源。问题:页面上提供了几个查询条件(例如按姓名,按部门,按性别),这些查询条件用户可以随意组合,也就是说查询参数不固定,那么点击查询按钮后,怎么把用户选择的查询条件传给数据集中提供的方法GetData?对objectdatasource做些什么(ControlParameter)?后台查询方法该怎么写?越详细越好啊

解决方案 »

  1.   

    首先,存储过程应该这样写
    Create Procedure getdate
    @username varchar(30),--姓名
    @userbranch varchar(40),--部门
    @usersex varchar(10) --性别
    as
    begin
         select * from users where (username=@username or @username='')
           and (userbranch=@userbranch or @ @userbranch='')
           and (usersex=@usersex or @userx='')
    --可以组合查询
    end
    然后代码里username,usersex,userbranch作为参数,如果只按照姓名查询,则usersex和userbranch赋值为"",如果是整数类型,则赋值为0
      

  2.   

    查询参数不可能不确定,因为你的查询发方法是确定的。只不过,参数值可以判断是否设置了值。例如对于string类型的参数,如果输入的值不是null也不是string.Empty,才参与查询,否则就应该被查询时自动忽略。其它参数也是如此,通常都是忽略默认值,例如对于int类型参数当它为0时默认就会忽略。
      

  3.   

    当你将控件绑定到ObjectDatasource时,也就是在ObjectDatasource内部使用 ControlParameter 来声明时,就要考虑到你的查询录入控件的默认值、跟查询方法的默认值,是否匹配的问题。
      

  4.   

    比如我的select中的where是:where Name=@Name and DepartmentId=@DepartmentId。页面提供了文本框textboxName和下拉框dropdownlistDepartment作为参数,那么在配置objectdatasource添加controlparameter时,参数Name和DepartmentId的默认值分别是什么呢?而且我这里又由于加了ControlParameter后,出现了错误:ObjectDataSource1未能找到带参数的非泛型方法QueryEmployeeCount:Name, DepartmentId, 我用了高效分页,QueryEmployeeCount函数只是用来获得员工数的,为什么会提示这样的错误?比较长,谢谢大侠了