2010-05-29 56 views
1

我想为我的程序添加搜索功能。有具有这种功能的类:将搜索结果绑定到数据网格

public DataTable Search() 
     { 
      string SQL = "Select * from Customer where " + mField + " like '%" + mValue + "%'"; 
      DataTable dt = new DataTable(); 
      dt = dm.GetData(SQL); 
      return (dt); 

     } 

有用于mFieldmValue setter和getter属性。 DMDataManagement类的对象,其具有方法GetData

public DataTable GetData(string SQL) 
    { 
     SqlCommand command = new SqlCommand(); 
     SqlDataAdapter dbAdapter = new SqlDataAdapter(); 
     DataTable DataTable = new DataTable(); 

     command.Connection = clsConnection.GetConnection(); 
     command.CommandText = SQL; 
     dbAdapter.SelectCommand = command; 
     dbAdapter.Fill(DataTable); 
     return (DataTable); 
    } 

的搜索功能目前是这样实现的:

private void btnfind_Click(object sender, EventArgs e) 
    { 
     //cust is the object of class customer// 
     if (tbCustName.Text != "") 
     { 
      cust.Field="CustName"; 
      cust.Value = tbCustName.Text; 
     } 
     else if (tbAddress.Text != "") 
     { 
      cust.Value = tbAddress.Text; 
      cust.Field="Address"; 
     } 
     else if (tbEmail.Text != "") 
     { 
      cust.Value = tbEmail.Text; 
      cust.Field="Email"; 
     } 
     else if (tbCell.Text != "") 
     { 
      cust.Value = tbCell.Text; 
      cust.Field = "Cell"; 
     } 

     DataTable dt = new DataTable(); 
     dt = cust.Search(); 
     dgCustomer.DataSource = dt; 
     RefreshGrid(); 
    } 

    private void RefreshGrid() 
    { 
     DataTable dt = new DataTable(); 
     dt = cust.GetCustomers(); 
     dgCustomer.DataSource = dt; 
    } 

这是行不通的。我不知道为什么。请帮忙。

回答

1

在您的RefreshGrid()方法中添加一个DataBind()声明,以使您的新结果实际显示在网格上。

private void RefreshGrid() 
{ 
    DataTable dt = cust.GetCustomers(); 
    dgCustomer.DataSource = dt; 
    dgCustomer.DataBind(); 
} 

考虑修改其他方法还有:

  1. 你的ad-hoc SQL有SQL注入漏洞。停止一切,直到你解决它!
  2. btnfind_Click不需要最终调用cust.Search()两次。

    private void btnfind_Click(object sender, EventArgs e) 
    { 
        //<snip> 
        // no need to do all this twice. 
        // DataTable dt = new DataTable(); 
        // dt = cust.Search(); 
        // dgCustomer.DataSource = dt; 
        RefreshGrid(); 
    
    } 
    
+0

但是已经有一个重新格网? :s – Abid 2010-05-29 14:11:00

+0

我的意思是我编辑以前的refereshgrid函数还是做一个新的函数? – Abid 2010-05-29 14:11:45

0

RefreshGrid方法覆盖DataSourcebtnfind_Click设置...不调用它,只需调用DataBind

private void btnfind_Click(object sender, EventArgs e) 
{ 
    ... 

    DataTable dt = cust.Search(); 
    dgCustomer.DataSource = dt; 
    dgCustomer.DataBind(); 

} 

顺便说一句,你不需要如果您立即将其设置为cust.Search的结果,则将新的DataTable分配给dt ...您只是创建了一个空白的实例(我将它固定在上面的代码中)