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

如何让DataGridView列先适配单元格再填充控件剩余空间?

实现DataGridView列先适配内容再填充剩余空间

我完全懂你的需求——想让DataGridView的列先自动适配所有单元格的内容宽度,之后再把控件剩下的空间分配给指定列,对吧?你当前的代码直接设置了Fill和DisplayedCells模式,但这两种模式没法组合出“先适配再填充”的效果,因为Fill是直接按比例分配剩余空间,不会先考虑内容宽度。

下面是具体的实现步骤和代码,完美匹配你的需求:

核心思路

  • 先强制所有列自动调整宽度,适配单元格内容;
  • 再将需要填充剩余空间的列设置为Fill模式,让它们在内容宽度的基础上,平分控件的剩余空间;
  • 保留需要固定内容宽度的列的DisplayedCells模式。

修改后的完整代码

Private Sub DataGridView1_DataBindingComplete(ByVal sender As Object, ByVal e As DataGridViewBindingCompleteEventArgs) Handles DataGridView1.DataBindingComplete
    ' 第一步:强制所有列适配显示的单元格内容宽度
    DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells)
    
    ' 第二步:设置需要填充剩余空间的列(前7列)为Fill模式
    For i As Integer = 0 To 6
        DataGridView1.Columns(i).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
    Next
    
    ' 保留第8列(索引7)的内容适配模式
    DataGridView1.Columns(7).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
    
    ' 隐藏第9列(索引8)
    DataGridView1.Columns(8).Visible = False
End Sub

代码细节说明

  • AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells):这是关键一步,它会立即计算并设置每列的宽度,确保列能完全显示当前可见单元格的内容。如果你需要适配所有单元格(包括未滚动显示的),可以换成DataGridViewAutoSizeColumnsMode.AllCells,但DisplayedCells的运行性能更优。
  • 循环设置前7列为Fill模式:此时这些列的基础宽度已经是内容所需的最小宽度,Fill模式会让它们平分DataGridView剩下的可用空间,既保证内容完整显示,又填满控件的空白区域。
  • 第7列保持DisplayedCells:它会一直保持适配内容的宽度,不会参与剩余空间的分配。

这样调整后,你的DataGridView就会先让所有列适配内容,再把多余的空间分配给前7列,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:17:06