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を回せば良い。