2017-10-23 7 views
0

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(この場合には、私は例外を持っている:「ボタンのクリックイベントを経由して、それが

+0

テーブルがnullかどうか、またはテーブルの名前が有効です。読み込み権限がない(システムテーブルなどの)スキーマクエリからテーブルを取得することがあります。 – jdweng

+2

なぜ 'AcceptChanges'が必要なのですか? 'getTableContent_v2'が返すのは、' DataRow.DataRowState'の一部が 'Unchanged'ではない行のあるテーブルです。それ以外の場合は、この行を省略すると、理由がないために行の状態をチェックするためにテーブル上のループが発生します。 –

+0

この_AcceptChanges_は、常に混乱の原因です。私は、この方法がOPの考え方を知りたいと思っています。 – Steve

答えて

0

回避策ソリューションロードされているすべてのテーブルのために正常に動作します。