Datagridview 第一次在标签页中不显示数据

Datagridview not showing data at first time in tabpage

我在 tabpage2 中有一个 datagridview,我有一个搜索按钮 tabpage1 来填充 datagridview。当我搜索并单击显示空行的 tabpage2 datagridview 时,我返回到 tabpage1 并再次单击搜索,然后转到显示数据的 tabpage2 datagridview,为什么会这样?

Dim daPA As New OracleDataAdapter
Dim dtPA As New DataTable()

Dim cmd As New OracleCommand("select * from POLICY_SUBAGENT_DETAIL where POLICY_REFER =:Vno", sgcnn)
cmd.Parameters.Add("@Vno", OracleDbType.NVarchar2).Value = TxtPolicyRefer.Text.ToString.Trim

dtPA.Clear()
daPA = New OracleDataAdapter(cmd)
daPA.Fill(dtPA)
DgvSubAgent.AutoGenerateColumns = False
DgvSubAgent.DataSource = dtPA

If dtPA.Rows.Count > 0 Then
    For i As Integer = 0 To dtPA.Rows.Count - 1
        DgvSubAgent.Rows(i).Cells(0).Value = dtPA.Rows(i).Item("SUBAGENT_NAME").ToString.Trim
        'DgvSubAgent.Rows(i).Cells(1).Value = dtPA.Rows(i).Item("BUSINESS_SHARE").ToString.Trim
        'DgvSubAgent.Rows(i).Cells(2).Value = dtPA.Rows(i).Item("COMM_P").ToString.Trim
        DgvSubAgent.Rows(i).Cells(1).Value = dtPA.Rows(i).Item("COMM_VALUE").ToString

    Next
End If

TabControl 的实现使得每个 TabPage 的控件在 TabPage 被 select 之前不会被创建。如果在填充该网格之前 select 包含该网格的选项卡,那么您应该会发现它会按预期工作。您可以在代码中做到这一点,只需在您已有的代码之上添加一行即可。如果您不想 select 选项卡,那么我想有一种方法可以强制在 TabPage 上创建控件。我必须进行测试才能确定,但​​我希望在 TabPage 上调用 CreateControl 可以解决问题。

我用了一个技巧,在填充datagridview之前添加一行TabControl1.SelectedIndex = 1

喜欢:

TabControl1.SelectedIndex = 1  ' where datagridview control placed,     
DgvSubAgent.DataSource = dtPA

然后在 end sub 之前添加一行 TabControl1.SelectedIndex = 0 --- 搜索按钮