获取DataGridView中的选定行不工作VB.Net

获取DataGridView中的选定行不工作VB.Net,vb.net,datagridview,selectedindex,Vb.net,Datagridview,Selectedindex,我有一个非常标准的DataGridView,并且已经使用了 .SelectionMode = DataGridViewSelectionMode.FullRowSelect .MultiSelect = False 以确保选中整行 情况:我需要获取所选行,以便将行中的数据加载到另一个屏幕以“修改”数据。我使用以下命令获取所选行 Private Sub DataGridView2_CellContentClick(sender As Object, e As DataGridViewCellEv

我有一个非常标准的DataGridView,并且已经使用了

.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.MultiSelect = False
以确保选中整行

情况:我需要获取所选行,以便将行中的数据加载到另一个屏幕以“修改”数据。我使用以下命令获取所选行

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-但当我点击行上的任何空白时,什么都不会发生,因此会导致使用上一行所选数据的问题,这实际上是错误的行

任何想法都将不胜感激。
提前感谢

您的问题与您正在使用的事件有关:
CellContentClick
。使用:
SelectionChanged
,而不是它。这对你的目的更有用

在这种情况下,发送方
e
不再是单元格,因此您可以将此访问权限更改为:
yourListviewName.SelectedRows
,这将为您提供包含选定行的
集合


由于您已禁用了
multiselect
属性,因此您只需访问其中的第一项。

我认为您要查找的是DataGridViewCellClick,而不是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

为什么不处理SelectionChanged事件?我不确定这是否有效。我尝试了私有子DataGridView2\u SelectionChanged(发送者作为对象,e作为DataGridViewCellEventArgs)处理DataGridView2.SelectionChanged,但无效您是否手动编写了它?因为这个
DataGridViewCellEventArgs
在这一行对我来说似乎很奇怪。如果手动编写事件句柄,请在VS.@mond007的代码视图顶部选择事件来创建它,确保方法签名与事件委托匹配。在这种情况下,SelectionChanged是一个委托:
(发送者作为对象,e作为事件参数)
好的,我知道我是使用VS中视图的顶部创建的,现在是正确的,即私有子DataGridView2\u SelectionChanged(发送者作为对象,e作为事件参数)处理DataGridView2.SelectionChanged如果e.RowIndex>=0,则尝试将行变暗为DataGridViewRow row=Me.DataGridView2.Rows(e.RowIndex),但e.RowIndex不编译。Thxs这是因为发件人更改了,我更新了答案@mond007