使用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);
}
现在,问题是:
- 我会高亮显示所有匹配的行,并显示异常"Object reference not set to a instance of the Object"
- 如何仅在数据网格中返回所有匹配的行,而不是突出显示它们
- 搜索区分大小写,如何使其适用于所有类型
任何帮助都将不胜感激,谢谢。
我想明白了。如果有人需要解决方案,代码如下:
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;
}
}
}
}