Question

I have a form in which a simple gridview is populated by a table in database having columns like TicketID, Name, Company, Product etc. Now I want to add a search feature so that user could search by customer name or company or TicketID.

How can I do that ? I want to place a combox box, textbox and a simple "search" button above datagrid. When the user selects TicketID for example, enters "1" in textbox and presses "Search", it should refresh datagrid with entry where TicketID = 1.

Now I don't have any idea on how to implement it. Googled for it but found nothing useful. So any help in this regard will be appreciated.

Regards.

Était-ce utile?

La solution

You may look into:

BindingSource bs = new BindingSource();
bs.DataSource = dataGridView1.DataSource;
bs.Filter = columnNameToSearch + " like '%" + textBox1.Text + "%'";
dataGridView1.DataSource = bs;

This will show you records containing text from textbox1 in column of your choice. I did exactly what you are asking for:)

Autres conseils

Create a Textbox for search input and use the following code on its TextChanged event

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

If you want refresh your DataSource depended on the search parameters, then you need to build a new SQL query depended on then "search" controls:

Will be better of you show your code of getting data from database,
but this is my shot with manual SQL-query creating:

//...
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;

This works for me.

What you need, filtering, not searching... Searching is highlighting the correct row from the set

Set grid DataSource to the result of DataTable.Select method

dtData.Select("TicketID = 1")

Also take a look to this 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; 
}

Now in the text_changed event of the textbox, write below code

dv.RowFilter = "StudentName like '%" + textBox1.Text + "%'";
dataGridView1.DataSource = dv;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top