【问题标题】:c# DataGridView foreach runs less times than expectedc# DataGridView foreach 运行的次数少于预期
【发布时间】: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


【解决方案1】:

尝试删除此dgvPretraga.Rows.Remove(row); 看看会发生什么。

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);
    }
}

然后,您可以在删除行时循环调整计数和索引:

for(int i = dgvPretraga.RowCount-1; i >= 0; i--){
    var row = dataGridView1.Rows[i];
    naziv = row.Cells["naziv"].Value.ToString();
    if (naziv.Contains(txtNaziv.Text))
    {
        Console.WriteLine("Yup = " + naziv);
    }
    else
    {
         dgvData.Rows.Remove(dgvPretraga.Rows[i]);
        Console.WriteLine("Not = " + naziv);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多