DataGridView-查找当前行

时间:2019-03-15 09:21:23

标签: vb.net

获得了由数据库填充的DGV。当显示DGV的表单时,我想在第一行上找到一个单元格的值,而当用户选择另一行时,我想找到一个选定的行单元格的值。

我使用过RowEnter事件,但是当窗体打开并给我一个错误时,它似乎被调用。如果我尝试在RowIndex> 0时收集单元格数据,那么它可以工作,但是我无法从第一行选择一个值。

Private Sub dgvOrders_RowEnter(sender As Object, e As DataGridViewCellEventArgs) Handles dgvOrders.RowEnter
  If e.RowIndex >= 0 Then
    txtOrderNumber.Text = dgvOrders.Rows(e.RowIndex).Cells(1).Value.ToString
  End If
end sub

我可以在文档中看到DGV最初加载时调用了该事件。

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datagridview.rowenter?redirectedfrom=MSDN&view=netframework-4.7.2

我为此使用了正确的事件吗? 我的代码有问题吗? 做我想做的最好的方法是什么?!

非常感谢所有帮助。这就是我所做的。我不需要将DGV的selectionMode设置为默认值。我确实需要知道用户何时更改了他正在查看的行,因此需要将代码放入DGV的“ SelectionChanged”事件中。

最后,我放弃了并通过检查dgvOrders.currentrow.cells(1).value返回的值是否为空,然后调用一个子程序,该子程序使用从当前行。

    Private Sub dgvOrders_SelectionChanged(sender As Object, e As EventArgs) Handles dgvOrders.SelectionChanged

        Try
            If Not dgvOrders.CurrentRow.Cells(1).Value Is Nothing Then
                populateFields()
            End If
        Catch ex As Exception
         'catch code here
        End Try
End sub

我不确定是否应该将任何回答标记为答案,但是所有人都帮助我达到了这一点。如果有更好的方法,请告诉我。

2 个答案:

答案 0 :(得分:0)

如果要单击行标题,请尝试

Private Sub DataGridView1_RowHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.RowHeaderMouseClick
    MessageBox.Show(DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToString)

End Sub

答案 1 :(得分:0)

您也可以尝试以下方法:

Private Sub dgvOrders_RowEnter(sender As Object, e As DataGridViewCellEventArgs) Handles dgvOrders.RowEnter
    If e.RowIndex >= 0 Then
        txtOrderNumber.Text = dgvOrders.SelectedRows(0).Cells(1).Value
    End If
End sub

并确保 dgvOrders.SelectionMode = FullRowSelect