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();
}
还可以考虑修改其他方法:
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();
}
还可以考虑修改其他方法:
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函数还是创建一个新函数?