2011年2月18日金曜日

【VB.NET】ソートされたとしてもDataGridViewの行に対応するDataRowを取得する

DataGridViewのDataSourceに BindingSource や DataTable を関連付けした場合に
DataGridViewの4行目に当たるDataTableの行を取得したい、とかやりたい時ありますよね。

通常はそのまま同じ4行目が対応する行になるのですが、
ソートをしてしまうとDataGridViewはソートされますが、DataTableはソートされず、
行番号が食い違うようになってしまいます。
その場合、下記関数をご利用ください。

  1. #Region "DataGridViewのRowIndexからDataTableのDataRowを取得する"  
  2.         ''' <summary>  
  3.         ''' DataGridViewのRowIndexからDataTableのDataRowを取得する  
  4.         ''' </summary>  
  5.         ''' <param name="RowIdx">''' <returns></returns>  
  6.         ''' <remarks>ソート時など、DataGridViewのRowIndexが必ずしもDataTableのRowIndexとマッチしないため</remarks>  
  7.         Public Function GetDataRow_ByDataGridViewRowIdx(ByVal RowIdx As IntegerAs DataRow  
  8.             Try  
  9.                 If Me.Rows(RowIdx).DataBoundItem Is Nothing Then  
  10.                     Return Nothing  
  11.                 End If  
  12.             Catch ex As IndexOutOfRangeException  
  13.                 Return Nothing  
  14.             End Try  
  15.   
  16.             Dim Dr As DataRow  
  17.             Dim Drv As DataRowView = CType(Me.Rows(RowIdx).DataBoundItem, System.Data.DataRowView)  
  18.             Dr = CType(Drv.Row, System.Data.DataRow)  
  19.   
  20.             Return Dr  
  21.         End Function  
  22.  
  23.  
  24. #End Region  

対応するDataRowが取得できます。
これで行移動時に値の編集するなど、DataRowをいじっちゃってください。

0 件のコメント:

コメントを投稿