私は、選択された行がどのように構成されているかについて混乱があると推測しています。 SelectedRows
はDataGridViewSelectedRowCollection
を返します。あなたが気付いたように、このコレクションの順序は、最後に選択された行がコレクション内のインデックス0(0)にあり、選択された最初の行がコレクションのLASTインデックスにあるようなものです。
ユーザーが行を選択した元の順序を取得する場合は、コレクションを元に戻すか、最後の索引から最初のコレクションまでループすることができます。これは、ユーザーが行を選択した元の順序を取得します。
ユーザーがトップダウン方式で行を選択すると想定できないことに注意してください。ユーザーは行2、行9、行4、行3の順に選択できます。行は連続した順序です。これらの選択された行で何をしているのかがはっきりしないので、行を削除することはあなたがやっていることではないと思います。
以下は、選択した行の元の順序を取得する方法の簡単な例です。注:DataGridView
のSelectionMode
はFullRowSelect
に設定する必要があります。これは物事をクリアすることを願っています。間違った解釈のために残念
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
FillGrid()
End Sub
Private Sub FillGrid()
For i = 1 To 15
DataGridView1.Rows.Add("Row" + i.ToString() + "C1", "Row" + i.ToString() + "C2", "Row" + i.ToString() + "C3")
Next
End Sub
Private Sub btSelectedRows_Click(sender As Object, e As EventArgs) Handles btSelectedRows.Click
TextBox1.Text += "Reverse selected values --------" + Environment.NewLine
TextBox1.Text += "There are " + DataGridView1.SelectedRows.Count.ToString() + " selected Rows" + Environment.NewLine
For Each curSelectedRow As DataGridViewRow In DataGridView1.SelectedRows
If Not curSelectedRow.IsNewRow Then ' ignore new row if selected
TextBox1.Text += curSelectedRow.Cells(0).Value + ", " + curSelectedRow.Cells(1).Value + ", " + curSelectedRow.Cells(2).Value + Environment.NewLine
End If
Next
TextBox1.Text += "End of Reverse selected values --------" + Environment.NewLine
End Sub
Private Sub btOriginalSelection_Click(sender As Object, e As EventArgs) Handles btOriginalSelection.Click
TextBox1.Text += "Original order of selected values --------" + Environment.NewLine
TextBox1.Text += "There are " + DataGridView1.SelectedRows.Count.ToString() + " selected Rows" + Environment.NewLine
Dim selectedRows As DataGridViewSelectedRowCollection = DataGridView1.SelectedRows
For rowIndex = selectedRows.Count - 1 To 0 Step -1
If Not selectedRows(rowIndex).IsNewRow Then ' ignore new row if selected
TextBox1.Text += selectedRows(rowIndex).Cells(0).Value + ", " + selectedRows(rowIndex).Cells(1).Value + ", " +
selectedRows(rowIndex).Cells(2).Value + Environment.NewLine
End If
Next
TextBox1.Text += "End of Original selection order of selected values --------"
End Sub
エンドクラス
。私は、なぜ文字列ビルダーを入れた後、クリップボードを入れた後に注文が変更されるのかという質問をしていますか? 同じコピーされた行を同じグリッドに貼り付けた後、注文が変更されるためです。 コピー順 ' 行1行2 ROW3 ' が、ペースト順序が ' ROW3 ROW2 ROW1 ' なぜですか? – picnic4u
申し訳ありませんが@ picnic4u私は間違っています。しかし、私はあなたのコードを通過している。私にとってクリップボードのテキストの順序は変更されていません。私の正しい順序でのそのショー – PRABA