ssCAROのブログ

色んなとこで見つけたプログラムのメモ置き場っぽい

DataGridViewで複数行の選択をDataRowにコピー

DataGridViewで複数行選択したデータをDataRowの配列に入れたい。
選択している1行をDataRowに入れるのはすぐに見つかった。
もっと良いやり方があるかもしれないけどメモ。

DataGridView.DataSourceにDataTableが割り付いていること。

If dgv.SelectedRows.Count > 0 Then
    Dim rowDatas(dgv.SelectedRows.Count - 1) As DataRow
    Dim rowIndexs(dgv.SelectedRows.Count - 1) As Integer
    Dim i As Integer
    '選択されている行のIndexを取得し
    For i = 0 To dgv.SelectedRows.Count - 1
        rowIndexs(i) = dgv.SelectedRows(i).Index
    Next
    '昇順に並び替えて
    Array.Sort(rowIndexs)
    '配列に格納する
    For i = 0 To dgv.SelectedRows.Count - 1
        rowDatas(i) = DirectCast(dgv.DataSource, DataTable).Rows(rowIndexs(i))
    Next
End If

一度、選択されている行のIndexを配列に入れているのはDataGridViewで選択開始行がSelectedRows(最後)で、選択終了行がSelectedRows(0)になるから。
また、Ctrlキーを押しながらあちこちポチポチと行を選択しても最後~0に向けてSelectedRowsに格納される。
選択した順番にDataRowに格納したい場合は、最後~0でForを回せば良い。