Vb.Net DataGridView 的行为方式很奇怪

问题描述 投票:0回答:1

在 VB.Net 表单上,我有一个 DataGridView,其中填充了 MariaDB DB表,并手动添加了一些组合和文本列。

详细:

  • 从数据库获取数据并将其放入DataTable

  • 我使用DataTable作为

    DataGridView

    的数据源
  • 我手动(我总是指从代码)向 DataGridView 添加 DataGridViewComboBoxColumn 和 DataGridViewTextBoxColumn 类型的列,并使用

    DataGridView1.Columns.Add(<new column>)

到目前为止没有任何问题。

所以:

  • 我从表单上的按钮启动一个进程,该进程使用经典的

    For Each row As DataGridViewRow In DataGridView1.Rows
    循环读取 DataGridView 的各个行,如果成功,我会在单元格上写入“确定”(
    row.Cells(PosEsito). Value = "OK"
    ),否则会显示错误代码。

  • 如果我读取此单元格,如果确定,我将删除数据库上的记录(使用命令 SQL 查询)并删除 DataGridView 的行,

    DataGridView1.Rows.Remove(row)
    始终在循环内

碰巧在 10 行结果正常的情况下,只有 8 或 9 行被删除……从来没有 10 行。

我要疯狂地调试这个相当线性的代码

你有什么想法可以帮助我吗

谢谢你

罗伯托

vb.net winforms datagridview
1个回答
0
投票

我看到这个:

表单上的

按钮,使用经典的 For Each 读取 DataGridView 的各个行...

还有这个:

始终在循环内使用 DataGridView1.Rows.Remove(row) 删除 DataGridView 的行

这两件事加在一起就不好了。 当您仍在使用

For Each
迭代集合时,不应修改任何类型的集合。

相反,您可以将要删除的行保存在单独的列表中,使用传统的索引

For
循环遍历网格(向后),或者在
For Each
循环时保持集合不变的任何其他选项仍然活跃。

© www.soinside.com 2019 - 2024. All rights reserved.