如何在DataGridView中创build像Excel一样的search?
我用这个代码来searchDataGridView
来查找并select一行(没有filter)! 但是,当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; } } }
Pic_Form …
这个想法:
- 添加一个私人领域的类作为索引来记住你最后find哪一行。
- 如果search文本已更改,请重置此索引。 (可选的)
- 遍历所有行,从上一次成功search之后的行开始。 如果没有find结果,请从头开始。
执行:
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; }
为什么这些变化?
-
for (int i = 0; i < dataGridView1.Rows.Count; i++)
- 仍遍历每一行。
-
searchIndex = (searchIndex + 1) % dataGridView1.Rows.Count;
- 从行[searchIndex + 1]开始。 当我们到达最后一行时,mod(
%
)将我们返回到第一行。
- 从行[searchIndex + 1]开始。 当我们到达最后一行时,mod(
-
private void textBox1_TextChanged(object sender, EventArgs e) { searchIndex = -1; }
- 当input新的search条件时,从列表的开始处开始。 这是可选的。