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

C# 解决DataGridView列AutoSizeMode模式初始加载显示异常问题

C# DataGridView首次绑定数据列显示异常问题修复方案

问题根因

首次绑定数据时DataGridView控件尚未完成窗体布局初始化,列宽计算依赖的控件尺寸为设计时预设值,而非运行时最终尺寸,导致列宽计算错误,部分列被挤压隐藏;搜索重新绑定时控件已完成渲染,尺寸参数正确,因此显示正常。

修复步骤

1. 调整绑定时机

将首次数据绑定逻辑从Form_Load或构造函数移至Form_Shown事件,保证绑定操作在控件布局完成后执行。

2. 显式定义列规则

禁用自动生成列,提前固定列配置,避免自动生成的列属性不符合预期,同时配置列宽填充模式保证无滚动条:

  • 关闭自动列生成:AutoGenerateColumns = false
  • 禁用滚动条:ScrollBars = ScrollBars.None
  • 列宽采用填充模式:AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill,通过FillWeight属性为不同列分配宽度占比

3. 绑定前后控制布局更新

绑定数据前暂停控件布局,绑定完成后强制刷新列宽计算,避免绑定过程中多次重绘导致的计算异常。

参考代码

private void Form1_Load(object sender, EventArgs e)
{
    // 初始化阶段提前配置列规则,仅执行一次
    dgvMain.AutoGenerateColumns = false;
    dgvMain.ScrollBars = ScrollBars.None;
    dgvMain.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

    // 自定义列,DataPropertyName对应SQL查询返回的字段名
    dgvMain.Columns.Add(new DataGridViewTextBoxColumn
    {
        Name = "Id",
        HeaderText = "编号",
        DataPropertyName = "Id",
        FillWeight = 15
    });
    dgvMain.Columns.Add(new DataGridViewTextBoxColumn
    {
        Name = "Description",
        HeaderText = "描述",
        DataPropertyName = "Description",
        FillWeight = 60
    });
    // 其余列按需求添加...
}

private void Form1_Shown(object sender, EventArgs e)
{
    // 首次绑定放在Shown事件,保证控件已完成布局
    LoadGridData();
}

// 数据加载方法,首次加载、搜索操作复用
private void LoadGridData(string searchFilter = "")
{
    dgvMain.SuspendLayout();
    
    // 此处替换为你的SQL Server数据读取逻辑
    DataTable data = QueryDataFromSql(searchFilter);
    dgvMain.DataSource = data;
    
    dgvMain.ResumeLayout();
    // 强制重新计算列宽
    dgvMain.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
    // 恢复填充模式保证列宽撑满控件无滚动条
    dgvMain.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}

补充说明

如果窗体支持尺寸调整,可在Form_SizeChanged事件中调用dgvMain.AutoResizeColumns()方法,保证窗体尺寸变化时列宽自动适配,不会出现滚动条。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:30:02