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

动态添加DataGridView时如何调整宽高消除右侧和底部灰色空白区域

解决方案

导致DataGridView出现右侧/底部灰色区域的核心原因是滚动条预留空间、尺寸计算逻辑误差,以及属性设置顺序冲突,按以下步骤调整即可解决:

  1. 修正代码逻辑错误与属性顺序
    • 现有代码末尾的end width是笔误,需改为End With
    • 移除.AutoSize = True配置,手动计算宽高时无需开启自动尺寸,否则手动赋值会被自动规则覆盖
    • 新增.ScrollBars = ScrollBars.None配置,关闭默认的滚动条预留空间,这是灰色区域最常见的诱因
    • 不要硬编码减去8的高度,改用ClientSize赋值,自动适配控件非客户区尺寸,避免手动计算误差
  2. 修正后的完整代码如下:
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
  1. 额外排查项
    • 检查DGV的父容器(窗体/Panel等)的Padding属性,如果不是0也会挤压控件产生边缘空白,可设置为Padding(0)
    • 如果动态添加DGV时,赋值Location属性的坐标有偏移,也会看起来有灰色边缘,可设置为Point(0,0)测试验证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:24:05