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

VB.NET中DataGridView绑定List运行时出现多余列问题

问题根因

运行时出现多余列头,是因为DataGridView的AutoGenerateColumns属性默认值为True:绑定数据源时,控件会自动为绑定类(含父类)的所有公共字段/属性生成对应列,和你手动添加配置的列叠加,就会出现列重复、多余列的问题。

修复步骤
  • 绑定数据源前,先关闭自动生成列开关,从根源阻止控件自动创建不需要的列:
' 禁止DataGridView自动生成列
dgvPlayers.AutoGenerateColumns = False
  • 绑定前可清空原有列,避免设计时残留的冗余列影响展示:
dgvPlayers.Columns.Clear()
  • 确认手动添加的列的DataPropertyName和实体类字段名完全匹配,再执行绑定逻辑。修正后的完整绑定代码参考:
' 绑定TournamentPlayers列表到DataGridView
dgvPlayers.AutoGenerateColumns = False
dgvPlayers.Columns.Clear()

' 配置需要展示的会员编号列
dgvMembershipNo.DataPropertyName = "strMembershipNo"
' 配置需要展示的会员姓名列
dgvPlayerName.DataPropertyName = "strMembershipName"

' 执行数据绑定
Dim bindingList = New BindingList(Of TournamentPlayers)(lstTournPlayers)
Dim source = New BindingSource(bindingList, Nothing)
dgvPlayers.DataSource = source
优化建议

你当前类定义中使用的是公共字段,仅做展示绑定可以正常运行,但如果需要实现单元格编辑后数据同步回源列表、数据变更自动通知UI等功能,建议将公共字段改写为公共属性,参考定义:

Public Class PlayerInfo
    Public Property strPlayerFirstName As String
    Public Property strPlayerLastName As String
    Public Property strMembershipNo As String
    Public Property strMembershipName As String
End Class

Public Class TournamentPlayers
    Inherits PlayerInfo
    Public Property intStatus As Integer = 0
    Public Property intByeRounds As Integer
    Public Property intTeamID As Integer
End Class

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:36:16