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
相关产品推荐
相关产品推荐

