我有一个函数,因此我可以选择数据表的行,并跟踪我选择的行。但是当它返回另一个数据表时,它会进入我向后选择的行。
因此,如果我在返回数据表时选择行1,2,3
,则行显示为3,2,1
这是函数:
Private Function getCoordinates()
Dim dt As New DataTable
Dim dt2 As New DataTable
Dim r As DataRow
Dim n As Integer
Dim selectedItems As DataGridViewSelectedRowCollection = dgv.SelectedRows
dt = dgv.DataSource
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect
dgv.MultiSelect = True
dt2.Columns.Add("Command")
dt2.Columns.Add("Position")
Try
If selectedItems Is Nothing Then
For n = 0 To dt.Rows.Count - 1
r("Command") = dt.Rows.Item(n)("Mouse Command")
r("Position") = dt.Rows.Item(n)("Mouse Position")
dt2.Rows.Add(r)
Next
Else
For Each selectedItem As DataGridViewRow In selectedItems
Dim MouseIndex = Convert.ToString(selectedItem.Cells(0).Value)
Dim CoordIndex = Convert.ToString(selectedItem.Cells(1).Value)
r = dt2.NewRow()
r("Command") = MouseIndex
r("Position") = CoordIndex
dt2.Rows.Add(r)
Next
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
Return dt2
End Function
Wsa只是想知道我是如何做到的,以便行不会像它那样反转。
答案 0 :(得分:2)
来自social.msdn.microsoft.com forum:
第一个选定的DataGridViewRow列在DataGridView的SelectedRows集合的最后一项中。这种行为是设计使然。
您可以循环每个DataGridViewRow并仅在选中时将其复制到DataTable中。
答案 1 :(得分:2)
或者只是向后循环:
For i As Integer = selectedItems.Count - 1 To 0 Step -1
Dim selectedItem As DataGridViewRow = selectedItems(i)
'...
Next