2012-08-11 119 views
0

我有一个问题让我堆叠,我无法找到任何解决方案,非常需要你的帮助:其实我需要在员工表上进行一些搜索,就像我需要搜索所有女性或已经得到phd等职位,我做了这个查询雇员表的函数,如果条件和这个搜索的结果进入一个gridview并允许为真的问题是,只要我点击下一步去到gridview中的其他页面,它做了一个完整的回发,并再次绑定到gridview数据源,因为我给gridview数据源下面的函数(DetailedSearch)与if cluases当它进入函数时,它开始阅读与第一条件如果没有去该特定条件,然后抛出异常未将对象引用设置为对象的实例Gridview分页问题

这里是我的代码(这是它只是一个部分不完整的代码):

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的分页意识到了这一点:(提前

感谢

+0

在什么行引发异常? – Andre 2012-08-11 03:38:22

回答

0

真的,也有可以改善的这么多东西在那个代码...

  1. 你在做FirstName != string.Empty反复,但你已经 在第一次测试它。
  2. 你应该改变以单一if(!String.IsNullOrEmpty(FirstName))
  3. 您应该使用sql parameters而不是字符串连接,因为这避免了潜在的SQL注入
  4. 你不应该传递字段的默认用户界面,像“请选择” 。在选择默认值情况下 ,传递空或空值

虽然这不回答或具体问题,这是一个很好的指导 - 事实上,在情况下,你尝试应用这些变化,它甚至可以解决你的问题在这个过程中