使用c#在datagridview中搜索

时间:2014-10-10 11:26:55

标签: c# search datagridview

在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. 我将所有匹配的行突出显示异常"对象引用未设置为对象的实例"
  2. 如何仅在数据网格中返回所有匹配的行而不是突出显示它们?
  3. 搜索区分大小写,如何使其适用于所有类型?
  4. 任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

    }