Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将搜索结果绑定到数据网格_C#_.net_Data Binding - Fatal编程技术网

C# 将搜索结果绑定到数据网格

C# 将搜索结果绑定到数据网格,c#,.net,data-binding,C#,.net,Data Binding,我想在我的程序中添加搜索功能。有一个类具有此功能: public DataTable Search() { string SQL = "Select * from Customer where " + mField + " like '%" + mValue + "%'"; DataTable dt = new DataTable(); dt = dm.GetData(SQL); re

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

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

        }
mField
mValue
的setter和getter属性
DM
是类
DataManagement
的对象,它有一个方法
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()
语句,使新结果实际显示在网格上

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

还可以考虑修改其他方法:

  • 您的特设SQL存在SQL注入漏洞。在你修好之前停止一切
  • btnfind\u单击
    不需要调用
    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();
    
    }
    
    private void btnfind\u单击(对象发送者,事件参数e)
    {
    //
    //这一切不必重复两次。
    //DataTable dt=新的DataTable();
    //dt=客户搜索();
    //dgCustomer.DataSource=dt;
    刷新网格();
    }
    
  • RefreshGrid()
    方法中添加
    DataBind()
    语句,使新结果实际显示在网格上

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

    还可以考虑修改其他方法:

  • 您的特设SQL存在SQL注入漏洞。在你修好之前停止一切
  • btnfind\u单击
    不需要调用
    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();
    
    }
    
    private void btnfind\u单击(对象发送者,事件参数e)
    {
    //
    //这一切不必重复两次。
    //DataTable dt=新的DataTable();
    //dt=客户搜索();
    //dgCustomer.DataSource=dt;
    刷新网格();
    }
    

  • 您的
    RefreshGrid
    方法正在覆盖您在
    btnfind\u单击中设置的
    DataSource
    。。。不要调用它,只需调用
    DataBind

    private void btnfind_Click(object sender, EventArgs e)
    {
        ...
    
        DataTable dt = cust.Search();
        dgCustomer.DataSource = dt;
        dgCustomer.DataBind();
    
    }
    

    顺便说一下,如果要立即将新的
    数据表设置为
    cust.Search
    的结果,则无需将其分配给dt。。。您只是在徒劳地创建一个实例(我在上面的代码中修复了它)

    您的
    RefreshGrid
    方法正在覆盖您在
    btnfind\u单击中设置的
    DataSource
    。。。不要调用它,只需调用
    DataBind

    private void btnfind_Click(object sender, EventArgs e)
    {
        ...
    
        DataTable dt = cust.Search();
        dgCustomer.DataSource = dt;
        dgCustomer.DataBind();
    
    }
    

    顺便说一下,如果要立即将新的
    数据表设置为
    cust.Search
    的结果,则无需将其分配给dt。。。您只是在创建一个空的实例(我在上面的代码中修复了它)

    我的意思是我要编辑以前的refereshGrid函数还是创建一个新函数?我的意思是我要编辑以前的refereshGrid函数还是创建一个新函数?