c#数据表错误
本文关键字:错误 数据表 | 更新日期: 2023-09-27 18:14:45
我在ListView上打印了一个数据表,它工作得很好,但在某些时候,它开始抛出这些错误。这个项目的解决方法是:
用户填充WinForms,然后插入到DataBase,当用户完成时,MainForm显示,调用actualizarFormulario()
方法,因此ListView
填充新数据。
编辑
这个错误中的第156行是item.SubItems.Add(row[1].ToString());
,但它也给了我153,155…foreach中的所有内容
21-05 17:00>异常:Tipo: System。InvalidOperationExceptionMensaje:收集被修改;枚举操作可能不会执行。奥利金:系统。数据堆栈跟踪:atSystem.Data.RBTree"1. rbtreeenumerator.movenext ()operationes_diveras . principal . actualizarformulario () in C:'Documents和Settings'usuario'mis documentos'visual studio2010 ' '项目Operaciones Diversas ' OperacionesDiversas ' Principal.cs: 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);
}
在遍历枚举对象时正在修改集合。用for
代替foreach
循环