Search for value in DataGridView in a column

前端 未结 6 1321
名媛妹妹
名媛妹妹 2020-12-01 17:12

I want the user to be able to search for a number in a column in the DataGridView (dgv). The dgv can hold many records. Each record has a Project Number. So I want the user

相关标签:
6条回答
  • 2020-12-01 17:56

    "MyTable".DefaultView.RowFilter = " LIKE '%" + textBox1.Text + "%'"; this.dataGridView1.DataSource = "MyTable".DefaultView;

    How about the relation to the database connections and the Datatable? And how should i set the DefaultView correct?

    I use this code to get the data out:

    con = new System.Data.SqlServerCe.SqlCeConnection();
    con.ConnectionString = "Data Source=C:\\Users\\mhadj\\Documents\\Visual Studio 2015\\Projects\\data_base_test_2\\Sample.sdf";
    con.Open();
    
    DataTable dt = new DataTable();
    
    adapt = new System.Data.SqlServerCe.SqlCeDataAdapter("select * from tbl_Record", con);        
    adapt.Fill(dt);        
    dataGridView1.DataSource = dt;
    con.Close();
    
    0 讨论(0)
  • 2020-12-01 18:01

    Filter the data directly from DataTable or Dataset:

    "MyTable".DefaultView.RowFilter = "<DataTable Field> LIKE '%" + textBox1.Text + "%'";
       this.dataGridView1.DataSource = "MyTable".DefaultView;
    

    Use this code on event KeyUp of Textbox, replace "MyTable" for you table name or dataset, replace for the field where you want make the search.

    0 讨论(0)
  • 2020-12-01 18:03

    Why you are using row.Cells[row.Index]. You need to specify index of column you want to search (Problem #2). For example, you need to change row.Cells[row.Index] to row.Cells[2] where 2 is index of your column:

    private void btnSearch_Click(object sender, EventArgs e)
    {
        string searchValue = textBox1.Text;
    
        dgvProjects.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        try
        {
            foreach (DataGridViewRow row in dgvProjects.Rows)
            {
                if (row.Cells[2].Value.ToString().Equals(searchValue))
                {
                    row.Selected = true;
                    break;
                }
            }
        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.Message);
        }
    }
    
    0 讨论(0)
  • 2020-12-01 18:03

    It's better also to separate your logic in another method, or maybe in another class.

    This method will help you retreive the DataGridViewCell object in which the text was found.

        /// <summary>
        /// Check if a given text exists in the given DataGridView at a given column index
        /// </summary>
        /// <param name="searchText"></param>
        /// <param name="dataGridView"></param>
        /// <param name="columnIndex"></param>
        /// <returns>The cell in which the searchText was found</returns>
        private DataGridViewCell GetCellWhereTextExistsInGridView(string searchText, DataGridView dataGridView, int columnIndex)
        {
            DataGridViewCell cellWhereTextIsMet = null;
    
            // For every row in the grid (obviously)
            foreach (DataGridViewRow row in dataGridView.Rows)
            {
                // I did not test this case, but cell.Value is an object, and objects can be null
                // So check if the cell is null before using .ToString()
                if (row.Cells[columnIndex].Value != null && searchText == row.Cells[columnIndex].Value.ToString())
                {
                    // the searchText is equals to the text in this cell.
                    cellWhereTextIsMet = row.Cells[columnIndex];
                    break;
                }
            }
    
            return cellWhereTextIsMet;
        }
    
        private void button_click(object sender, EventArgs e)
        {
            DataGridViewCell cell = GetCellWhereTextExistsInGridView(textBox1.Text, myGridView, 2);
            if (cell != null)
            {
                // Value exists in the grid
                // you can do extra stuff on the cell
                cell.Style = new DataGridViewCellStyle { ForeColor = Color.Red };
            }
            else
            {
                // Value does not exist in the grid
            }
        }
    
    0 讨论(0)
  • 2020-12-01 18:05
    //     This is the exact code for search facility in datagridview.
    private void buttonSearch_Click(object sender, EventArgs e)
    {
        string searchValue=textBoxSearch.Text;
        int rowIndex = 1;  //this one is depending on the position of cell or column
        //string first_row_data=dataGridView1.Rows[0].Cells[0].Value.ToString() ;
    
        dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        try
        {
            bool valueResulet = true;
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if (row.Cells[rowIndex].Value.ToString().Equals(searchValue))
                {
                    rowIndex = row.Index;
                    dataGridView1.Rows[rowIndex].Selected = true;
                    rowIndex++;
                    valueResulet = false;
                }
            }
            if (valueResulet != false)
            {
                MessageBox.Show("Record is not avalable for this Name"+textBoxSearch.Text,"Not Found");
                return;
            }
        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.Message);
        }
    }
    
    0 讨论(0)
  • 2020-12-01 18:12

    Why don't you build a DataTable first then assign it to the DataGridView as DataSource:

    DataTable table4DataSource=new DataTable();
    
    table4DataSource.Columns.Add("col00");
    table4DataSource.Columns.Add("col01");
    table4DataSource.Columns.Add("col02");
    
    ...
    

    (add your rows, manually, in a circle or via a DataReader from a database table) (assign the datasource)

    dtGrdViewGrid.DataSource = table4DataSource;
    

    and then use:

    (dtGrdViewGrid.DataSource as DataTable).DefaultView.RowFilter = "col00 = '" + textBoxSearch.Text+ "'";
    dtGrdViewGrid.Refresh();
    

    You can even put this piece of code within your textbox_textchange event and your filtered values will be showing as you write.

    0 讨论(0)
提交回复
热议问题