我从SQLite DB(包含多个表)获取数据并将它们加载到选项卡中的dataGridView中。 我想通过在循环中使用DataTable对象的AcceptChanges()函数初始化每个表的每一行状态( - >“Unchanged”),但我遇到以下错误消息:
抛出异常:mscorlib.dll中的'System.ArgumentOutOfRangeException'
雷姆。 0:异常发生在循环中的“随机”第n个表(16)。在我的情况下,它是第一个在第9个表,然后在添加新的代码行后,它实际上在第5个表。
雷姆。 1:我还检查过所有DataTable对象都有自己唯一的TableName。
List<String> tableList = SQLITE.getDBElement(SQLITE.getCnx(SQLITE.path), "table");
foreach (String name in tableList)
{
// Creating tab and data gridview
TabPage tabPage = new TabPage(name);
tabPage.Name = name;
tabControl1.TabPages.Add(tabPage);
tabPage.AutoScroll = true;
DataGridView dataGridView = new DataGridView();
dataGridView.Name = name;
dataGridView.AutoSize = true;
tabPage.Controls.Add(dataGridView);
// Get table datas
DataTable table = SQLITE.getTableContent_v2(SQLITE.getCnx(SQLITE.path), name);
dataGridView.DataSource = table;
// Add row change event
table.RowChanged += new DataRowChangeEventHandler(Table_RowChanged);
// Init lines status
table.AcceptChanges(); //-> throw an exception after several loops
}
雷姆。 2:没有最后一行“table.AcceptChanges();”,没有错误(所有带有dataGridView的标签都加载了数据。
雷姆。 3:如果我手动执行“table.AcceptChanges();”通过按钮单击事件,它适用于所有已加载的表。
答案 0 :(得分:0)
WorkAround解决方案:交换这两行
// Add row change event
table.RowChanged += new DataRowChangeEventHandler(Table_RowChanged);
// Init lines status
table.AcceptChanges(); //-> throw an exception after several loops
AcceptChanges()可以抛出RowChanged事件,在这种情况下我有异常。