2011年2月18日金曜日

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

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

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

#Region "DataGridViewのRowIndexからDataTableのDataRowを取得する"
        ''' 
        ''' DataGridViewのRowIndexからDataTableのDataRowを取得する
        ''' 
        ''' ''' 
        ''' ソート時など、DataGridViewのRowIndexが必ずしもDataTableのRowIndexとマッチしないため
        Public Function GetDataRow_ByDataGridViewRowIdx(ByVal RowIdx As Integer) As DataRow
            Try
                If Me.Rows(RowIdx).DataBoundItem Is Nothing Then
                    Return Nothing
                End If
            Catch ex As IndexOutOfRangeException
                Return Nothing
            End Try

            Dim Dr As DataRow
            Dim Drv As DataRowView = CType(Me.Rows(RowIdx).DataBoundItem, System.Data.DataRowView)
            Dr = CType(Drv.Row, System.Data.DataRow)

            Return Dr
        End Function


#End Region

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

0 件のコメント:

コメントを投稿