我猜有混亂,如何選擇行DataGridView
s的組織。 SelectedRows
返回DataGridViewSelectedRowCollection
。正如你注意到的,這個集合的順序是這樣的,LAST選擇的行在集合中的索引爲零(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
末級
遺憾的錯誤理解。我在問,爲什麼在放入字符串構建器之後放入ClipBoard中,順序變得更改了? 因爲在同一個網格中粘貼相同的複製行之後,順序發生了變化。 複製順序 ' ROW1 2行 ROW3 ' 但貼順序 ' ROW3 2行 ROW1 ' 爲什麼呢? – picnic4u
抱歉@ picnic4u我錯了。但我已經通過你的代碼。對我來說剪貼板的文字順序沒有變化。它對我來說顯示順序正確 – PRABA