DataGridViewでのRowsAddedイベントの注意点


ASP.NETのGridViewコントロールでは、バインドデータを表示する際にRowDataUpdatedイベントがあり、そのイベント応答関数で各行ごとにバインドされたデータを行ごとにスキャンでき、必要に応じてGridView表示のフォーマットやValueなどを変更できるので便利です.
WinFormエンジニアリングでは、これと似たようなDataGridViewコントロールは、RowsAddedイベントのみが似ていますが、GridViewとは異なり、RowsAddedイベントの応答はRowDataUpdatedのように逐条応答していません.Debugでは長い間この問題を発見していましたが、実はDataGridViewRowsAddedEventArgs eのプロパティのRowCountを見ると、RowsAddedイベントの応答に複数行挿入する可能性があることがわかります.単行を挿入することもできます(Rowsは複数形で、愚かです).したがって、e.RowIndexを使用して挿入ローのインデックス値を取得し、e.RowCountを使用して挿入ローの数を取得します.この2つの変数を使用すると、バインドされたデータを簡単に巡回できます.コードは次のようになります.

  
  
  
  
  1.         private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)  
  2.         {  
  3.             int rowIndex = e.RowIndex;  
  4.             int rowCount = e.RowCount;  
  5.             for (int i = rowIndex; i < rowIndex + rowCount; i++)  
  6.             {  
  7.                 // List<AccountInfo> ,  
  8.                 AccountInfo info = this.dataGridView1.Rows[i].DataBoundItem as AccountInfo;
  9.  
  10. /////////////////////////////////////////  
  11. //   
  12. ///////////////////////////////////////////  
  13.              }  
  14.         }