gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:44:00 26 4
gpt4 key购买 nike

我使用此代码在 DataGridView 中搜索以查找并选择一行(无过滤器)!但是,当 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;
}
}
}

最佳答案

想法:

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

实现:

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 ( % ) 将我们返回到第一行。
  3. private void textBox1_TextChanged(object sender, EventArgs e)
    {
    searchIndex = -1;
    }

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

关于c# - 如何在 DataGridView 中创建类似 excel 的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30093288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com