【问题标题】:Gridview paging issueGridview分页问题
【发布时间】:2012-08-11 03:33:51
【问题描述】:

我有一个问题让我陷入困境,我无法找到任何解决方案,非常需要你的帮助:实际上我需要在员工表上进行某种搜索,就像我需要搜索所有员工一样是女性或拥有博士学位等,我为此创建了一个函数,该函数使用 if 条件查询员工表,并且此搜索的结果出现在允许分页为 true 的网格视图中,问题是每当我单击下一步转到其他页面在gridview中,它会进行完整的回发并再次绑定到gridview数据源,并且当我为gridview数据源提供以下函数(DetailedSearch)时,当它进入该函数时,它会从第一个if条件开始读取,而无需转到特定的if条件,然后它抛出异常对象引用未设置为对象的实例

这是我的代码(只是其中的一部分,不是完整代码):

    public DataTable DetailedSearch()
    {
        con.Open();
        SqlDataAdapter da=new SqlDataAdapter();


         if (FirstName != string.Empty)
         {
             if (FirstName != string.Empty && LastName != "--Letters--")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'"+"and lastname like '"+LastName.ToString()+"%'", con);
             }
             else if(FirstName!=string.Empty && Gender!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and gender='" + Gender.ToString() + "'", con);

             }
             else if(FirstName!=string.Empty && MaritalStatus!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and maritalstatus='" + MaritalStatus.ToString() + "'", con);
             }
             else if(FirstName!=string.Empty && Qualification!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and qualification='" + Qualification.ToString() + "'", con);
             }
             else if(FirstName!=string.Empty && GraduationDate!=DateTime.MinValue)
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and graduationdate='" + GraduationDate.ToString() + "'", con);
             }
             else if(FirstName!=string.Empty && Province!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and province='" + Province.ToString() + "'", con);
             }
             else if(FirstName!=string.Empty && LastEmployer!=string.Empty)
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and lastemployer='" + LastEmployer.ToString() + "'", con);
             }
            else if(FirstName!=string.Empty && EnteredBy!="{Please Select}")
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and enteredby='" + EnteredBy.ToString() + "'", con);
             }
             else if (FirstName != string.Empty && DateEntered != DateTime.MinValue)
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'" + "and dateentered='" + DateEntered.ToString() + "'", con);
             }
             else
             {
                 da = new SqlDataAdapter("select * from employee where firstname ='" + FirstName.ToString() + "'", con);
             }
         }
         else if (LastName != "--Letters--")
         {
                if (LastName != "--Letters--" && Province != "{Please Select}")
                 {
                     da = new SqlDataAdapter("select * from employee where lastname like'" + LastName.ToString() + "%'" + "and province='" + Province.ToString() + "'", con);
                 }
                else if (Gender != "{Please Select}" && LastName != "--Letters--")
                {
                    da = new SqlDataAdapter("select * from employee where gender='" + Gender.ToString() + "'" + "and lastname like '" + LastName.ToString() + "%'", con);
                }
        DataTable dt = new DataTable();
        da.Fill(dt);
        con.Close();
        return dt;

    }

请帮我弄清楚该怎么做,因为我完全空白并且没有逻辑出现在我的脑海中,我必须放置 if 子句,因为根据搜索,查询可能不一样,但是如何让 gridview 分页意识到这一点:(

提前致谢

【问题讨论】:

  • 在哪一行抛出异常?

标签: c# asp.net gridview


【解决方案1】:

真的,那段代码有很多可以改进的地方......

  1. 你重复FirstName != string.Empty,但你已经 在第一个 if 中对其进行了测试。
  2. 你应该换成一单if(!String.IsNullOrEmpty(FirstName))
  3. 您应该使用sql parameters 而不是字符串连接,因为这样可以避免潜在的 sql 注入
  4. 您不应传递字段的默认用户界面,例如“请选择”。如果 默认值被选中,传递一个null或空值

虽然这并没有具体回答或提问,但它是一个很好的指导 - 事实上,如果您尝试应用这些更改,它甚至可以解决您在此过程中遇到的问题

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多