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

如何自动调整Form高度,使内部DataGridView不显示垂直滚动条?

让Form自动适配DataGridView高度,避免垂直滚动条

这个需求其实挺常见的,核心思路就是算出DataGridView实际需要的总高度,再让Form的高度刚好能容纳它,还要记得算上Form本身的标题栏、边框这些非客户区的高度,不然很容易出现高度不准的情况。我给你整理了一套亲测好用的代码方案:

第一步:先调整DataGridView的基础属性

先把几个关键属性设置好,避免干扰后续的高度计算:

  • 把AllowUserToAddRows设为false:如果不需要底部的空行,不然会平白多算一行的高度
  • 如果你的行高是自动适配内容的,记得把AutoSizeRowsMode设为AllCells,确保行高能正确匹配内容高度

第二步:编写高度计算与调整的方法

写一个专门的方法来处理高度计算,后续数据变化时也能直接复用:

using System.Linq; // 要引用Linq,不然Rows.Cast会报错

private void AdjustFormHeightToFitDgv()
{
    // 先确保行高已经正确计算(如果是自动行高的话)
    dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells);

    // 计算DataGridView需要的总高度:表头高度 + 所有行高度总和 + 上下内边距
    int dgvRequiredHeight = dataGridView1.ColumnHeadersHeight +
                           dataGridView1.Rows.Cast<DataGridViewRow>().Sum(row => row.Height) +
                           dataGridView1.Padding.Top +
                           dataGridView1.Padding.Bottom;

    // 获取Form非客户区的高度(标题栏+边框的总高度)
    int formNonClientHeight = this.Height - this.ClientSize.Height;

    // 设置Form的总高度,同时保证不小于最小合理高度(比如标题栏高度)
    int newFormHeight = dgvRequiredHeight + formNonClientHeight;
    this.Height = Math.Max(newFormHeight, this.MinimumSize.Height);

    // 也可以直接设置客户区高度,Form会自动调整总高度,效果是一样的
    // this.ClientSize = new Size(this.ClientSize.Width, dgvRequiredHeight);
}

第三步:在合适的时机调用调整方法

在数据加载完成后调用这个方法,比如在Form_Load事件里:

private void Form1_Load(object sender, EventArgs e)
{
    // 这里先完成你的数据绑定操作
    // 示例:dataGridView1.DataSource = yourDataList;

    // 数据加载完毕后,立刻调整Form高度
    AdjustFormHeightToFitDgv();
}

额外提醒

  • 如果后续数据有变化(比如新增、删除行),记得重新调用AdjustFormHeightToFitDgv(),Form会自动更新高度
  • 如果Form设置了MinimumSize,要确保计算后的高度不小于这个值,避免Form显示异常
  • 你的场景里只有一列,基本不会出现水平滚动条,但如果后续加了列导致出现水平滚动条,可能需要额外调整Form的宽度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:35:14