Vb.net Datagridview在填充数据源后不会自动选择第一行

Vb.net Datagridview在填充数据源后不会自动选择第一行,vb.net,visual-studio-2010,data-binding,datagridview,Vb.net,Visual Studio 2010,Data Binding,Datagridview,我有4列的datagridview [Nam]、[ID]、[Shuru]、[Payan] 第二列([ID])是隐藏的,用于收集有关数据的一些详细信息。 这是加载代码: Private Sub SalMali_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.DGV_SalMaliTableAdapter.Fill(Me.FDBDataSet.DGV_SalMali

我有4列的datagridview [Nam]、[ID]、[Shuru]、[Payan] 第二列([ID])是隐藏的,用于收集有关数据的一些详细信息。 这是加载代码:

Private Sub SalMali_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.DGV_SalMaliTableAdapter.Fill(Me.FDBDataSet.DGV_SalMali)
End Sub
它检索DGV_SalMali表中的所有内容。 我知道datagridview会在填充后自动选择第一行,所以我在选择更改中添加了一个函数来检索数据。代码如下:

    Private Sub DGV_SalMaliDataGridView_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DGV_SalMaliDataGridView.SelectionChanged
        refreshDT()
    End Sub
Public Sub refreshDT()
        Dim cnt As Integer = DGV_SalMaliDataGridView.Rows.Count
        If cnt = 0 Then
            GoTo line
        End If

        unlockAll()

        Dim sel As String = DGV_SalMaliDataGridView.SelectedRows(0).Cells(1).Value

        Dim dt As New DataTable
        dt = SalMaliTA.GetData_SalMali_B_ID(sel)
        Dim dtr As DataRow = dt.Rows(0)

        TextBox1.Text = dtr.Item(4)
        MaskedTextBox1.Text = mc.MtoS(dtr.Item(1))
        MaskedTextBox2.Text = mc.MtoS(dtr.Item(2))
        CheckBox1.Checked = dtr.Item(3)

        Exit Sub
line:
        lockAll()
    End Sub
但是当我调用
refreshDT()
时,选择不再起作用。它在refreshDT()的第8行抛出一个错误

sub{正好在这里:Dim sel As String=DGV_SalMaliDataGridView.SelectedRows(0).Cells(1).Value}

抛出:“索引超出范围。必须为非负且小于 集合的大小。” (System.ArgumentOutOfRangeException)异常消息=“索引为 超出范围。必须为非负数且小于 集合“”,异常类型=“System.ArgumentOutOfRangeException”

datagridview有行,我不知道问题出在哪里。
谢谢您的帮助。

您当前正在检查是否有任何行,但没有任何选定行:

Public Sub refreshDT()
    Dim cnt As Integer = DGV_SalMaliDataGridView.Rows.Count
    If cnt = 0 Then
        lockAll()
        Exit Sub
    End If

    If DGV_SalMaliDataGridView.SelectedRows.Count = 0 Then
        DGV_SalMaliDataGridView.Rows(0).Selected = true
    End If

    unlockAll()

    Dim sel As String = DGV_SalMaliDataGridView.SelectedRows(0).Cells(1).Value

    Dim dt As New DataTable
    dt = SalMaliTA.GetData_SalMali_B_ID(sel)
    Dim dtr As DataRow = dt.Rows(0)

    TextBox1.Text = dtr.Item(4)
    MaskedTextBox1.Text = mc.MtoS(dtr.Item(1))
    MaskedTextBox2.Text = mc.MtoS(dtr.Item(2))
    CheckBox1.Checked = dtr.Item(3)
End Sub