在datagridview中搜索C#winform

时间:2011-06-02 05:27:29

标签: c# winforms search datagridview

我想在DataGridView中添加一个搜索选项,即用户在TextBox中键入字符串或int,类似的记录应突出显示DataGridView。我使用KeyPress事件尝试了它,但没有用。

  if (Char.IsLetter(e.KeyChar))
  {
     for (int i = 0; i < (dgemployee.Rows.Count); i++)
     {
         if (dgemployee.Rows[i].Cells["Employee"].Value.ToString().
                    StartsWith(e.KeyChar.ToString(), true, 
                    CultureInfo.InvariantCulture))
         {
             dgemployee.Rows[i].Cells[0].Selected = true;
             return;                     
         }
      }

实际上,我需要搜索整个DataGridView,而不仅仅是一列和一行。那么最好的解决方案呢?

3 个答案:

答案 0 :(得分:5)

如果您的DataGridView绑定到DataTable或DataView,您可以这样做:

创建BindingSource并使BindingSource.DataSource DGV当前正在使用的Datatable或DataView。然后将DataGridView.DataSource设置为BindingSource。然后,您可以使用BindingSource.Filter属性通过将BindingSource.Filter设置为您的查询字符串来查询数据源,该字符串将自动过滤DGV。您可以找到语法here - 它与基本的SQL查询非常相似,除了您只能在字符串的开头和结尾使用通配符。

答案 1 :(得分:0)

使用DataView.RowFilter属性。

另请查看DataTable.DefaultView

看一下this article我写了一些时间来实时过滤数据。

答案 2 :(得分:0)

        private void txtsearchgroup_KeyUp(object sender, KeyEventArgs e) {
        SqlConnection objconnection = new SqlConnection(servername and ...);
        DataView Dv = new DataView();
        objcommand = new SqlCommand("select name from groupitems", objconnection);
        objdataadapter = new SqlDataAdapter();
        objdataadapter.SelectCommand = new SqlCommand();
        objdataadapter.SelectCommand = objcommand;
        objdataset = new DataSet();
        objconnection.Open();
        objdataadapter.Fill(objdataset);
        Dv.Table = objdataset.Tables[0];
        Dv.RowFilter = " name LIKE '%" + txtsearchgroup.Text + "%'";
        dataGridView1.DataSource = Dv;
        objconnection.Close(); }
  • txtsearchgroup:datagridview1和
  • 中搜索词的文本框名称
  • txtsearchgroup_KeyUp:datagridview1中搜索和过滤词的keyup事件和
  • 从groupitems中选择名称:name是groupitems表的字段和
  • Dv.Table = objdataset.Tables [0]:零(0)是数据集中的第一个表