Vb.net Datagridview在填充数据源后不会自动选择第一行
我有4列的datagridview [Nam]、[ID]、[Shuru]、[Payan] 第二列([ID])是隐藏的,用于收集有关数据的一些详细信息。 这是加载代码: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
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