获取DataGridView中的选定行无法使用VB.Net

时间:2015-05-14 09:21:11

标签: vb.net datagridview selectedindex

我有一个非常标准的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 - 但当我点击行上的任何空白区域时没有任何反应,因此导致使用前一行选择的问题,实际上是错误的行。?

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

2 个答案:

答案 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。这对你的目的更有用。

SelectionChanged

在这种情况下,发件人e不再是一个单元格,因此您可以将此访问权限更改为:yourListviewName.SelectedRows,从而为您提供包含所选行的Collection

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