动态添加DataGridView时如何调整宽高消除右侧和底部灰色空白区域
解决方案
导致DataGridView出现右侧/底部灰色区域的核心原因是滚动条预留空间、尺寸计算逻辑误差,以及属性设置顺序冲突,按以下步骤调整即可解决:
- 修正代码逻辑错误与属性顺序
- 现有代码末尾的
end width是笔误,需改为End With - 移除
.AutoSize = True配置,手动计算宽高时无需开启自动尺寸,否则手动赋值会被自动规则覆盖 - 新增
.ScrollBars = ScrollBars.None配置,关闭默认的滚动条预留空间,这是灰色区域最常见的诱因 - 不要硬编码减去8的高度,改用
ClientSize赋值,自动适配控件非客户区尺寸,避免手动计算误差
- 现有代码末尾的
- 修正后的完整代码如下:
With dgv .DataSource = dTable .Dock = DockStyle.None .AllowUserToAddRows = False .AllowUserToOrderColumns = False .AllowUserToDeleteRows = False .AllowUserToResizeColumns = False .AllowUserToResizeRows = False .EditMode = DataGridViewEditMode.EditProgrammatically .RowHeadersVisible = False .DefaultCellStyle.WrapMode = DataGridViewTriState.False .ColumnHeadersVisible = True .SelectionMode = DataGridViewSelectionMode.CellSelect .MultiSelect = True .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells .BorderStyle = BorderStyle.None .ScrollBars = ScrollBars.None ' 新增:关闭滚动条预留空间 .Margin = New Padding(0) ' 新增:清除控件默认边距 .ColumnHeadersDefaultCellStyle.Font = New Font("Segoe UI", 8) .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing ' 计算总宽度 Dim width As Integer = 0 For i As Integer = 0 To .ColumnCount - 1 .Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopLeft .Columns(i).SortMode = DataGridViewColumnSortMode.NotSortable .Columns(i).DefaultCellStyle.Font = New Font("Segoe UI", 8) width += .Columns(i).Width Next i .AutoResizeColumns() .AutoResizeRows() ' 计算总高度 Dim height As Integer = .ColumnHeadersHeight For i As Integer = 0 To .Rows.Count - 1 height += .Rows(i).Height .Rows(i).Resizable = False Next i ' 直接赋值客户区尺寸,无需手动修正偏移 .ClientSize = New Size(width, height) ' 计算完成后关闭自动尺寸,避免后续变动产生空白 .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None .AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None End With
- 额外排查项
- 检查DGV的父容器(窗体/Panel等)的
Padding属性,如果不是0也会挤压控件产生边缘空白,可设置为Padding(0) - 如果动态添加DGV时,赋值
Location属性的坐标有偏移,也会看起来有灰色边缘,可设置为Point(0,0)测试验证
- 检查DGV的父容器(窗体/Panel等)的
内容的提问来源于stack exchange,提问作者rtO
相关产品推荐
相关产品推荐

