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

VB.NET 2022中DataGridView最后一行高度设置无效求助

DataGridView最后一行高度无法填满控件的问题解决

问题描述

使用VB.NET 2022开发时,尝试调整DataGridView最后一行的高度以填满整个控件,但设置后未生效。使用的代码如下:

Dim lr As Integer = DataListInfo1.Rows.Count - 1
Dim rowHeigthSum As Integer

For n = 0 To lr
    rowHeigthSum += DataListInfo1.Rows(n).Height
Next n

lr = DataListInfo1.Rows.Count - 1
DataListInfo1.Rows(lr).Height = CInt(DataListInfo1.Height) - rowHeigthSum 

相关参数:

  • DataListInfo1.Rows.Count = 4
  • 计算时仅累加了行0、1、2的高度(合计87,每行29),最后一行(行3)原高度17
  • DataGridView控件高度为215,预期将行3高度改为128以填满控件,但实际仍为17

相关截图说明:

  • 【DataGridView显示效果】:当前控件的界面布局
  • 【DataGridView最后一行高度】:最后一行高度仍为17的状态
  • 【BorangThailand界面】:关联的整体界面情况

问题原因

  1. 计算逻辑错误:原代码若按循环逻辑会把最后一行高度也加入总和,导致最终目标高度计算偏差;即使手动只累加前3行,直接用控件整体高度计算也忽略了非行显示区域的占用。
  2. 未区分控件整体高度与可用高度:DataListInfo1.Height包含控件边框、标题栏等非行显示区域的高度,直接使用会导致可用高度计算错误。
  3. 未排除列标题高度:列标题栏的高度不属于行的显示区域,未减去这部分会进一步影响高度计算准确性。

修正代码

Dim lastRowIndex As Integer = DataListInfo1.Rows.Count - 1
If lastRowIndex < 0 Then Exit Sub ' 无数据行时直接退出

Dim totalHeight As Integer = 0
' 累加除最后一行外的所有行高度
For i As Integer = 0 To lastRowIndex - 1
    totalHeight += DataListInfo1.Rows(i).Height
Next

' 获取控件内部可用高度:客户区高度减去列标题高度
Dim availableHeight As Integer = DataListInfo1.ClientSize.Height - DataListInfo1.ColumnHeadersHeight
' 计算目标高度,确保不低于默认行高避免显示异常
Dim targetHeight As Integer = Math.Max(availableHeight - totalHeight, DataListInfo1.DefaultRowHeight)

DataListInfo1.Rows(lastRowIndex).Height = targetHeight

额外说明

  • 若DataGridView显示垂直滚动条,需先设置DataListInfo1.ScrollBars = ScrollBars.None,否则滚动条会占用部分高度,导致最后一行无法填满。
  • 建议在DataGridView的SizeChanged事件中调用这段代码,确保控件大小变化时自动调整最后一行高度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 21:33:27