SQLite DB(いくつかのテーブルを含む)からデータを取得し、タブ内のdataGridViewにロードします。 ループ内のDataTableオブジェクトのAcceptChanges()関数を使用して各テーブルの各行ステータス( - > "Unchanged")を初期化したいと思いますが、次のエラーメッセージが表示されます。DataTable.AcceptChanges in loop - > ArgumentOutOfRangeException
例外スロー: System.ArgumentOutOfRangeException 'in mscorlib.dll
Rem。 0:ループ内の "ランダム" n番目のテーブル(16)で例外が発生しました。私の場合は、9thhテーブルの最初のテーブルで、新しいコード行を追加した後は実際には5番目のテーブルにあります。
Rem。 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
}
Rem。 2:最後の行 "table.AcceptChanges();"がない場合、エラーはありません(dataGridViewのすべてのタブにデータが読み込まれます)。 RowChangedイベントを投げることができる)スワップの2行
// Add row change event
table.RowChanged += new DataRowChangeEventHandler(Table_RowChanged);
// Init lines status
table.AcceptChanges(); //-> throw an exception after several loops
れるAcceptChanges(この場合には、私は例外を持っている:「ボタンのクリックイベントを経由して、それが
テーブルがnullかどうか、またはテーブルの名前が有効です。読み込み権限がない(システムテーブルなどの)スキーマクエリからテーブルを取得することがあります。 – jdweng
なぜ 'AcceptChanges'が必要なのですか? 'getTableContent_v2'が返すのは、' DataRow.DataRowState'の一部が 'Unchanged'ではない行のあるテーブルです。それ以外の場合は、この行を省略すると、理由がないために行の状態をチェックするためにテーブル上のループが発生します。 –
この_AcceptChanges_は、常に混乱の原因です。私は、この方法がOPの考え方を知りたいと思っています。 – Steve