簡體   English   中英

將搜索結果綁定到數據網格

[英]Binding search results to data grid

我想在程序中添加搜索功能。 有一個具有此功能的類:

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;
    }

這是行不通的。 我不知道為什么 請幫忙。

RefreshGrid()方法中添加一個DataBind()語句,以使新結果實際顯示在Grid上。

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

也可以考慮修改其他方法:

  1. 您的臨時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(); } 

您的RefreshGrid方法正在覆蓋您在btnfind_Click設置的DataSource ...不要調用它,只需調用DataBind

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

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

}

順便說一句,如果您立即將新的DataTable設置為cust.Search的結果,則cust.Search為dt分配新的DataTable ...您只需創建一個實例即可(我在上面的代碼中對其進行了修復)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM