使用c#在datagridview中搜索

本文关键字:搜索 datagridview 使用 | 更新日期: 2023-09-27 18:26:12

在datagridview中加载一个表后,我将从datagrid列标题生成一个组合框的项。从组合框中,我选择了列,并且我有一个文本框,用于显示用户给定的搜索值。我使用以下代码:

        string searchForText = txtCrudSearch.Text;
        dgvLoadTable.ClearSelection();
        dgvLoadTable.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        try
        {
            foreach (DataGridViewRow row in dgvLoadTable.Rows)
            {
                if (row.Cells[cboCrudSearchColumn.SelectedIndex].Value.ToString().Equals(searchForText))
                {
                    row.Selected = true;
                    //if I use break here the code doesn't give exception 
                    //but highlights only one row. I want to return all rows that
                    // match with the search string
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

现在,问题是:

  1. 我会高亮显示所有匹配的行,并显示异常"Object reference not set to a instance of the Object"
  2. 如何仅在数据网格中返回所有匹配的行,而不是突出显示它们
  3. 搜索区分大小写,如何使其适用于所有类型

任何帮助都将不胜感激,谢谢。

使用c#在datagridview中搜索

我想明白了。如果有人需要解决方案,代码如下:

 private void btnCrudSearch_Click(object sender, EventArgs e)
    {
        dgvLoadTable.CurrentCell = null;
        dgvLoadTable.AllowUserToAddRows = false;
        dgvLoadTable.ClearSelection();
        dgvLoadTable.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        dgvLoadTable.ReadOnly = true;
        try
        {
            foreach (DataGridViewRow row in dgvLoadTable.Rows)
            {
                var cellValue = row.Cells[cboCrudSearchColumn.SelectedIndex].Value;
                if (cellValue != null && cellValue.ToString() == txtCrudSearch.Text.ToUpper())
                {
                    row.Selected = true;
                    row.Visible = true;
                }
                else
                    row.Visible = false;
            }
        }
        catch (Exception exc)
        {
            MessageBox.Show(exc.Message);
        }
    }

将此代码添加到TextChanged事件中,此代码将搜索数据网格视图中的所有单元格。

private void txtSearch_TextChanged(object sender, EventArgs e)   
{
     string searchValue = txtSearch.Text;
     for (var i = 0; i <= dgvList.RowCount; i++)
     {
          for (var j = 0; j <= dgvList.ColumnCount; j++)
          {
               if ((dgvList.Item(j, i).FormattedValue.ToString.ToLower).ToString.Contains(searchValue.ToString.ToLower))
               {
                    Console.Writeline("found");
                    dgvList.Item(j, i).Selected = true;
                    return;
               }
          }
     }
}