我有一个非常标准的DataGridView,并且已经使用了
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.MultiSelect = False
以确保选择整行。
情况:我需要获取所选行,以便将行中的数据加载到另一个屏幕以“修改”数据。我使用以下内容来获取Selected Row。
Private Sub DataGridView2_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView2.CellContentClick
Try
If e.RowIndex >= 0 Then
Dim row As DataGridViewRow
row = Me.DataGridView2.Rows(e.RowIndex)
GlobalVariables.SelectedlineItemRowNo = e.RowIndex ' Or row
MsgBox("GlobalVariables.SelectedlineItemRowNo is ---> " & GlobalVariables.SelectedlineItemRowNo)
'textboxTst.Text = row.Cells("Description").Value.ToString
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
问题:问题是,大多数时候点击DGV中的数据运行上面的代码并设置e.RowIndex - 但当我点击行上的任何空白区域时没有任何反应,因此导致使用前一行选择的问题,实际上是错误的行。?
任何想法都将不胜感激。 提前致谢
答案 0 :(得分:2)
我认为您正在寻找的是DataGridView CellClick 而不是CellContentClick。单击单元格内容周围的空白区域时,CellContentClick不会触发。
Private Sub DataGridView2_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView2.CellClick
Try
If e.RowIndex >= 0 Then
Dim row As DataGridViewRow
row = Me.DataGridView2.Rows(e.RowIndex)
GlobalVariables.SelectedlineItemRowNo = e.RowIndex ' Or row
MsgBox("GlobalVariables.SelectedlineItemRowNo is ---> " & GlobalVariables.SelectedlineItemRowNo)
'textboxTst.Text = row.Cells("Description").Value.ToString
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
答案 1 :(得分:0)
您的问题与您正在使用的事件有关:CellContentClick
。而不是它,使用:SelectionChanged
。这对你的目的更有用。
在这种情况下,发件人e
不再是一个单元格,因此您可以将此访问权限更改为:yourListviewName.SelectedRows
,从而为您提供包含所选行的Collection
。
由于您已禁用multiselect
属性,因此您只需要访问其中的第一项。