我有一个表单,其中一个简单的gridview由数据库中的表填充,其中包含TicketID,Name,Company,Product等列。现在我想添加一个搜索功能,以便用户可以按客户名称或公司或TicketID进行搜索。
我怎样才能做到这一点 ?我想在数据网格上方放置一个combox框,文本框和一个简单的“搜索”按钮。例如,当用户选择TicketID时,在文本框中输入“1”并按“搜索”,它应刷新数据网格,其中TicketID = 1。
现在我对如何实现它一无所知。谷歌搜索但没有发现任何有用的东西。所以在这方面的任何帮助将不胜感激。
问候。
你可以看看:
BindingSource bs = new BindingSource();
bs.DataSource = dataGridView1.DataSource;
bs.Filter = columnNameToSearch + " like '%" + textBox1.Text + "%'";
dataGridView1.DataSource = bs;
这将显示包含您选择的列中textbox1的文本的记录。我完全按照你的要求做了:)
如果你想刷新你的DataSource
取决于搜索参数,那么你需要建立一个新的SQL查询依赖于然后“搜索”控件:
你会更好地展示从数据库获取数据的代码, 但这是我用手动SQL查询创建的镜头:
//...
StringBuilder query = new StringBuilder();
query.AppendLine("SELECT TicketID, Name, Company, Product");
query.AppendLine("FROM YourTable WHERE 1=1");
if (txtSearch.TextLength > 0)
{
query.AppendLine("AND TicketID = @TicketID");
//Here add sqlparameter with textbox value
}
//... and so on
BindingSource bs = new BindingSource();
bs.DataSource = dataGridView1.DataSource;
bs.Filter = "[database column Name To Search] like '%" + textBox1.Text + "%'";
dataGridView1.DataSource = bs;
BindingSource bs = new BindingSource();
bs.DataSource = dgrid.DataSource;
bs.Filter = "Full_Name like '%" + tsptxt_search.Text + "%'";
dgrid.DataSource = bs;
这适合我。
你需要什么,过滤,而不是搜索......搜索突出显示集合中的正确行
将grid DataSource设置为DataTable.Select方法的结果
dtData.Select("TicketID = 1")
另外看看这个post
DataSet ds;
DataView dv;
public Form1()
{
InitializeComponent();
ds = new DataSet();
dv = new DataView();
}
private void Form1_Load(object sender, EventArgs e)
{
ds=SelectStudents();
dv.Table = ds.Tables[0];
dataGridView1.DataSource = dv;
}
现在在文本框的text_changed事件中,写下面的代码
dv.RowFilter = "StudentName like '%" + textBox1.Text + "%'";
dataGridView1.DataSource = dv;
为搜索输入创建文本框,并在其TextChanged事件上使用以下代码
private void txtSearch_TextChanged(object sender, EventArgs e)
{
(dataGridView.DataSource as DataTable).DefaultView.RowFilter = string.Format("TicketID like '{0}%' OR Product like '{0}%' OR Name like '{0}%' OR Product like '{0}%'", txtSearch.Text);
}