在 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 行。
我要疯狂地调试这个相当线性的代码
你有什么想法可以帮助我吗
谢谢你
罗伯托
我看到这个:
表单上的按钮,使用经典的 For Each 读取 DataGridView 的各个行...
还有这个:
始终在循环内使用 DataGridView1.Rows.Remove(row) 删除 DataGridView 的行
这两件事加在一起就不好了。 当您仍在使用
For Each
迭代集合时,不应修改任何类型的集合。
相反,您可以将要删除的行保存在单独的列表中,使用传统的索引
For
循环遍历网格(向后),或者在 For Each
循环时保持集合不变的任何其他选项仍然活跃。