gpt4 book ai didi

C# 数据表错误

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:07 27 4
gpt4 key购买 nike

我在 ListView 上打印了一个 DataTable,它工作正常,但在某些时候,它开始出现这些错误。该项目的解决方法是:

用户填写WinForms,然后插入DataBase,当用户完成后,显示MainForm,调用actualizarFormulario()方法,所以ListView被填充新数据。

编辑

此错误中的第 156 行是 item.SubItems.Add(row[1].ToString()); 但它也给了我 153、155... foreach 中的所有内容。

21-05 17:00 > Exception: Tipo: System.InvalidOperationException Mensaje: Collection was modified; enumeration operation might not execute. Origen: System.Data Stacktrace: at System.Data.RBTree`1.RBTreeEnumerator.MoveNext() at Operaciones_Diversas.Principal.actualizarFormulario() in C:\Documents and Settings\usuario\mis documentos\visual studio 2010\Projects\Operaciones Diversas\Operaciones Diversas\Principal.cs:line 156


填充数据的代码是这样的

private void actualizarFormulario()
{
try
{
listaLotes.Items.Clear();
foreach (DataRow row in Consultas.listadoLotes().Rows)
{
ListViewItem item = new ListViewItem(row[0].ToString());
item.SubItems.Add(row[1].ToString());
item.SubItems.Add(Convert.ToDecimal(row[2].ToString().Substring(0, row[2].ToString().Length - 2) + "," + row[2].ToString().Substring(row[2].ToString().Length - 2, 2)).ToString("N2", Cultures.Spain));
item.SubItems.Add(row[3].ToString());
item.SubItems.Add(row[4].ToString());
listaLotes.Items.Add(item);
}
}
catch (Exception ex) { Logger.log(ex); }
}

public static DataTable listadoLotes()
{
try
{
SelectBD sel = new SelectBD(Program.ConexBD,
"SELECT referencia, tipo, total_lote, COUNT(Documentos.id) as Documentos, cuenta FROM Lotes"
+ " LEFT JOIN Documentos"
+ " ON Lotes.referencia = Documentos.ref_lote"
+ " WHERE Lotes.fecha_creacion='" + valoresGenerales.dateHoy + "'"
+ " GROUP BY Lotes.referencia, Lotes.tipo, Lotes.total_lote, Lotes.cuenta"
+ " ORDER BY Lotes.tipo"
);
return sel.DataTable;
}
catch (Exception ex)
{
Logger.log(ex);
return new DataTable();
}
}

编辑 2

使用 for 循环提高了我的程序速度,但不能这样,因为用户需要与所有事物快速交互......

for (int i = 0; i < Consultas.listadoLotes().Rows.Count; i++)
{
ListViewItem item = new ListViewItem(Consultas.listadoLotes().Rows[i]["referencia"].ToString());
item.SubItems.Add(Consultas.listadoLotes().Rows[i]["tipo"].ToString());
item.SubItems.Add(Convert.ToDecimal(Consultas.listadoLotes().Rows[i]["total_lote"].ToString()
.Substring(0, Consultas.listadoLotes().Rows[i]["total_lote"].ToString().Length - 2)
+ ","
+ Consultas.listadoLotes().Rows[i]["total_lote"].ToString()
.Substring(Consultas.listadoLotes().Rows[i]["total_lote"].ToString().Length - 2, 2)).ToString("N2", Cultures.Spain));
item.SubItems.Add(Consultas.listadoLotes().Rows[i]["Documentos"].ToString());
item.SubItems.Add(Consultas.listadoLotes().Rows[i]["cuenta"].ToString());
listaLotes.Items.Add(item);
}

编辑 3工作代码

        listaLotes.Items.Clear();
DataTable tabla = Consultas.listadoLotes();
for (int i = 0; i < tabla.Rows.Count; i++)
{
ListViewItem item = new ListViewItem();
item.SubItems.Add(tabla.Rows[i]["referencia"].ToString());
item.SubItems.Add(tabla.Rows[i]["tipo"].ToString());
item.SubItems.Add(Convert.ToDecimal(tabla.Rows[i]["total_lote"].ToString()
.Substring(0, tabla.Rows[i]["total_lote"].ToString().Length - 2)
+ ","
+ tabla.Rows[i]["total_lote"].ToString()
.Substring(tabla.Rows[i]["total_lote"].ToString().Length - 2, 2)).ToString("N2", Cultures.Spain));
item.SubItems.Add(tabla.Rows[i]["Documentos"].ToString());
item.SubItems.Add(tabla.Rows[i]["cuenta"].ToString());
listaLotes.Items.Add(item);
}

最佳答案

您在遍历可枚举对象时正在修改集合。不要使用 foreach 循环,而是使用 for 循环。

关于C# 数据表错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16673434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com