You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET WinForms中DataGridView二次点击按钮不显示行求助

WinForms DataGridView二次刷新无数据行问题解决方法

方案1:强制触发控件刷新与布局

有时候DataGridView更新数据源后,不会自动触发重绘和布局,导致数据行无法显示。可以在设置完DataSource后,手动调用刷新和布局方法:

Private Sub btnSettings_Click(sender As Object, e As EventArgs) Handles btnSettings.Click
    Dim t As DataTable

    Me.Cursor = Cursors.WaitCursor
    dgvSettings.Visible = False
    btnSettings.Enabled = False

    ' Get the settings and show them in the grid.
    dgvSettings.DataSource = Nothing
    t = GetSettings()
    dgvSettings.DataSource = t
    
    ' 强制刷新并重置布局
    dgvSettings.Refresh()
    dgvSettings.PerformLayout()

    btnSettings.Enabled = True
    dgvSettings.Visible = True
    Me.Cursor = Cursors.Default
End Sub

方案2:通过BindingSource作为数据中间层

直接绑定DataTable偶尔会出现绑定不稳定的情况,用BindingSource作为数据源容器,能更可靠地处理数据更新:

首先在窗体级别声明BindingSource:

Private settingsBindingSource As New BindingSource()

然后修改点击事件代码:

Private Sub btnSettings_Click(sender As Object, e As EventArgs) Handles btnSettings.Click
    Dim t As DataTable

    Me.Cursor = Cursors.WaitCursor
    dgvSettings.Visible = False
    btnSettings.Enabled = False

    ' Get the settings and show them in the grid.
    settingsBindingSource.DataSource = Nothing
    t = GetSettings()
    settingsBindingSource.DataSource = t
    dgvSettings.DataSource = settingsBindingSource

    btnSettings.Enabled = True
    dgvSettings.Visible = True
    Me.Cursor = Cursors.Default
End Sub

方案3:确保每次获取全新的DataTable实例

如果GetSettings返回的是同一个DataTable实例(比如内部缓存了对象),重复绑定可能导致控件识别不到数据变化。可以在调用时复制一个新的DataTable:

Private Sub btnSettings_Click(sender As Object, e As EventArgs) Handles btnSettings.Click
    Dim t As DataTable

    Me.Cursor = Cursors.WaitCursor
    dgvSettings.Visible = False
    btnSettings.Enabled = False

    ' Get the settings and show them in the grid.
    dgvSettings.DataSource = Nothing
    ' 复制DataTable获取全新实例
    t = GetSettings().Copy()
    dgvSettings.DataSource = t

    btnSettings.Enabled = True
    dgvSettings.Visible = True
    Me.Cursor = Cursors.Default
End Sub

以上三种方案都能解决你遇到的“二次点击仅显示表头,排序后才显示数据”的问题,优先尝试方案2,BindingSource是WinForms中推荐的数据绑定方式,稳定性更高。

内容的提问来源于stack exchange,提问作者LGS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 00:45:28