循环中的DataTable.AcceptChanges - > ArgumentOutOfRangeException

时间:2017-10-23 12:58:50

标签: c# sqlite datatable

我从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();”通过按钮单击事件,它适用于所有已加载的表。

1 个答案:

答案 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事件,在这种情况下我有异常。