【问题标题】:Datagridview doesnt auto select first row after filling datasource填充数据源后,Datagridview 不会自动选择第一行
【发布时间】:2015-05-27 09:49:16
【问题描述】:

我有 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 { exactly here : Dim sel As String = DGV_SalMaliDataGridView.SelectedRows(0).Cells(1).Value }

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

datagridview 有行,我不知道问题是什么。 谢谢你的帮助。

【问题讨论】:

    标签: vb.net visual-studio-2010 data-binding datagridview


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多