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

