如何在 DataGridView 中创建类似 excel 的搜索?

How do I create search like excel in DataGridView?

我使用此代码在 DataGridView 中搜索并找到 select 一行(无过滤器)!但是,当 DataGridView 在行中有重复值时,它不会得到下一行!如何在每次单击 Btn_find 时转到下一行(查找与 Excel 类似的内容)?

private void button1_Click(object sender, EventArgs e)
{
    button1.Text = "Find Next";

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.Cells["ProductId"].Value == null)
        {
            continue;
        }
        if (row.Cells["ProductId"].Value.ToString().Trim() == textBox1.Text)
        {
            dataGridView1.CurrentCell = row.Cells["ProductId"];
            dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows[row.Index].Index;
            return;
        }
    }
} 

想法:

  • 将私有字段添加到 class 作为索引以记住您上次找到的行。
  • 如果更改了搜索文本,请重置此索引。 (可选)
  • 遍历所有行,从上次成功搜索之后的行开始。如果上次搜索没有找到结果,则从头开始。

实施:

private int searchIndex = -1;

private void button1_Click(object sender, EventArgs e)
{
  button1.Text = "Find Next";

  for (int i = 0; i < dataGridView1.Rows.Count; i++)
  {
    searchIndex = (searchIndex + 1) % dataGridView1.Rows.Count;
    DataGridViewRow row = dataGridView1.Rows[searchIndex];

    if (row.Cells["Foo"].Value == null)
    {
      continue;
    }
    if (row.Cells["Foo"].Value.ToString().Trim() == textBox1.Text)
    {
      dataGridView1.CurrentCell = row.Cells["Foo"];
      dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows[row.Index].Index;
      return;
    }
  }
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
  searchIndex = -1;
}

为什么要进行这些更改?

  1. for (int i = 0; i < dataGridView1.Rows.Count; i++)

    • 仍然遍历每一行。
  2. searchIndex = (searchIndex + 1) % dataGridView1.Rows.Count;

    • 从第 [searchIndex + 1] 行开始。当我们到达最后一行时,mod (%) returns 我们到达第一行。
  3. private void textBox1_TextChanged(object sender, EventArgs e) { searchIndex = -1; }

    • 当输入新的搜索条件时,从列表的开头开始。这是可选的。