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

绑定数据源后单独设置DataGridView各列宽度的问题

解决方案

PowerShell 修改方案

核心思路

必须在绑定数据源之后操作列(绑定前列未生成,会触发找不到属性的异常),对目标列关闭自动调整逻辑后设置固定宽度,其余列保留自动调整规则。

修改后的代码片段

# 初始化DataGridView原有代码
$script:dataGridView1 = New-Object System.Windows.Forms.DataGridView;
$script:dataGridView1.Name = 'dataGridView1';
$script:dataGridView1.Size = '1235, 450';
$script:dataGridView1.RowTemplate.DefaultCellStyle.ForeColor = '#000088';
$script:dataGridView1.ReadOnly = $True;
$script:dataGridView1.AllowUserToDeleteRows = $False;
$script:dataGridView1.RowHeadersVisible = $False;
$script:dataGridView1.TabIndex = 3;
# 设置全局自动调整模式(替换原16即Fill模式,需保留Fill可看下方备注)
$script:dataGridView1.AutoSizeColumnsMode = [System.Windows.Forms.DataGridViewAutoSizeColumnMode]::AllCellsExceptHeader;
$script:dataGridView1.AllowUserToAddRows = $False;
$script:dataGridView1.ColumnHeadersHeightSizeMode = 2;
$script:dataGridView1.Location = '13, 87';
$script:dataGridView1.AllowUserToOrderColumns = $True;

# 绑定数据源(必须在列操作之前执行)
$script:dataGridView1.DataSource = $script:AWtable1;

$script:dataGridView1.Anchor = (4, 8, 1);
$script:dataGridView1.DataBindings.DefaultDataSourceUpdateMode = 0;

# 操作特定列:示例设置名为"ID"的列宽度为80
$targetColumn = $script:dataGridView1.Columns["ID"]
if ($targetColumn) {
    # 关闭该列自动调整,才能设置固定宽度
    $targetColumn.AutoSizeMode = [System.Windows.Forms.DataGridViewAutoSizeColumnMode]::None
    $targetColumn.Width = 80
} else {
    Write-Warning "指定的目标列不存在,请检查列名"
}

# 备注:若需保留全局Fill模式(原代码的16),仅修改目标列即可,其余列自动填充剩余空间
# $script:dataGridView1.AutoSizeColumnsMode = [System.Windows.Forms.DataGridViewAutoSizeColumnMode]::Fill
# 绑定数据源后再设置目标列的AutoSizeMode为None和Width

C# 实现方案

代码示例

using System.Windows.Forms;
using System.Drawing;

// 初始化DataGridView
DataGridView dataGridView1 = new DataGridView();
dataGridView1.Name = "dataGridView1";
dataGridView1.Size = new Size(1235, 450);
dataGridView1.RowTemplate.DefaultCellStyle.ForeColor = Color.FromArgb(0, 0, 136);
dataGridView1.ReadOnly = true;
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.RowHeadersVisible = false;
dataGridView1.TabIndex = 3;
// 设置全局自动调整模式
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView1.Location = new Point(13, 87);
dataGridView1.AllowUserToOrderColumns = true;

// 绑定数据源
dataGridView1.DataSource = AWtable1;

dataGridView1.Anchor = AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom;
dataGridView1.DataBindings.DefaultDataSourceUpdateMode = DataSourceUpdateMode.Never;

// 设置特定列宽度:示例为列名为"ID"的列
DataGridViewColumn targetColumn = dataGridView1.Columns["ID"];
if (targetColumn != null)
{
    targetColumn.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
    targetColumn.Width = 80;
}

// 若需全局Fill模式,替换AutoSizeColumnsMode为Fill即可
// dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;

异常原因说明

出现The property "AutoSizeMode/Width" cannot be found on this object.异常的核心原因:

  • 操作时机错误:在绑定数据源前尝试访问列,此时DataGridView尚未根据数据源生成列集合,引用的列对象为空。
  • 列标识错误:指定的列名/索引不存在,导致无法找到对应列对象,进而无法访问属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:10:35