我想在C#
中的特定列中搜索某些文本例如,我有三列:Roll No,Name,Surname
每当我在Datagridview中输入名称如“Mohan”时,我希望看到名称为Mohan的数据。
最重要的是我不想使用文本框进行搜索,我需要在Datagridview中键入字母并进行搜索。
我的Datagridview是只读的,因此无论我在Datagridview中输入什么内容,都不会编辑任何单元格。
任何帮助都非常感谢。谢谢。
答案 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
具有焦点。如果表单上有其他可聚焦控件,则需要根据您的逻辑来适应这一点。