C#如何在没有文本框的情况下在Datagridview中搜索

时间:2018-04-22 14:46:53

标签: c# datagridview

我想在C#

中的特定列中搜索某些文本

例如,我有三列:Roll No,Name,Surname

每当我在Datagridview中输入名称如“Mohan”时,我希望看到名称为Mohan的数据。

最重要的是我不想使用文本框进行搜索,我需要在Datagridview中键入字母并进行搜索。

我的Datagridview是只读的,因此无论我在Datagridview中输入什么内容,都不会编辑任何单元格。

任何帮助都非常感谢。谢谢。

2 个答案:

答案 0 :(得分:0)

此代码将遍历DataGridView中的行,并在Name列中查找搜索值,如果找到,则会选择该行:

foreach (DataGridViewRow row in yourGrid.Rows)
{
    if (row.Cells["Name"].Value.ToString().Equals(searchValue))
    {
        row.Selected = true;
    }
}

答案 1 :(得分:0)

一般来说,我同意CodingYoshi - 你不应该在没有提供适当控制的情况下这样做。但是,我认为有一种方法可以实现您的目标,因此我将为您提供如何操作的建议。

首先,您需要确定要在哪个列中查找搜索词。为此,您需要为CellEnter事件设置处理程序并跟踪单元格的ColumnIndex。当然,如果你想搜索每一行的每个单元格,或者SelectionMode不是FullRowSelect,你就不需要了。

接下来,您需要一种机制来跟踪按键,这样您就知道当用户按Enter键时要搜索的内容。

    private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e)
    {
        ActiveColumn = e.ColumnIndex;
        SearchTerm = string.Empty;
    }

    private void dgv_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter && !string.IsNullOrEmpty(SearchTerm))
        {
            Lookup(SearchTerm.ToLowerInvariant());
            SearchTerm = string.Empty;
        }
        else if (e.KeyCode == Keys.Back && SearchTerm.Length > 0)
        {
            SearchTerm = SearchTerm.Substring(0, SearchTerm.Length - 1);
        }
        else if (e.KeyCode == Keys.Escape)
        {
            SearchTerm = string.Empty;
        }
        else
        {
            var converter = new KeysConverter();
            var c = Convert.ToChar(converter.ConvertToString(e.KeyData));

            if (char.IsLetterOrDigit(c))
            {
                SearchTerm += c;

                label1.Text = SearchTerm;
            }
        }
    }

    private void Lookup(string what)
    {
        foreach (DataGridViewRow row in dgv.Rows)
        {
            var currentText = row.Cells[ActiveColumn].Value.ToString().ToLowerInvariant();

            if (currentText.Contains(what))
            {
                row.Selected = true;
                break;
            }
        }
    }

此代码假定DataGridView具有焦点。如果表单上有其他可聚焦控件,则需要根据您的逻辑来适应这一点。