【发布时间】:2016-06-05 14:23:38
【问题描述】:
我正在尝试搜索我的 DataGridView,但我的 foreach 循环仅运行 4 次而不是行计数时间...
private void btnPretrazi_Click(object sender, EventArgs e)
{
string naziv = "";
foreach(DataGridViewRow row in dgvPretraga.Rows)
{
naziv = row.Cells["naziv"].Value.ToString();
if (naziv.Contains(txtNaziv.Text))
{
Console.WriteLine("Yup = " + naziv);
}
else
{
dgvPretraga.Rows.Remove(row);
Console.WriteLine("Not = " + naziv);
}
}
}
控制台输出 1(Anker):
Not = B.Disk gumeni FI 125
Not = Tipla Fe M16
Not = Rascepka Hus 300 8.0x90
Not = Civija Jus 230 6x70
控制台输出 2(磁盘):
Yup = B.Disk gumeni FI 125
Not = B.Burgija Multi Gar.4-8
Not = Navratka Jus 602M 12x1.25
Not = Anker 753 12x100
它按预期工作,但只运行了 4 次,并且 DGV 中有 8 行。 我做错了什么?
【问题讨论】:
-
您是否调试过代码并查看发生了什么?
-
删除一行时,会跳过下一行。它应该为此抛出异常。如果用户可以添加行,您也可能会在最后一行遇到 NRE
-
> foreach 语句用于遍历集合以获取您想要的信息,但不能用于从源集合中添加或删除项目以避免不可预知的副作用。如果您需要从源集合中添加或删除项目,请使用 for 循环。 msdn.microsoft.com/en-us/library/ttw7t8t6.aspx
标签: c# loops datagridview foreach