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界面】:关联的整体界面情况
问题原因
- 计算逻辑错误:原代码若按循环逻辑会把最后一行高度也加入总和,导致最终目标高度计算偏差;即使手动只累加前3行,直接用控件整体高度计算也忽略了非行显示区域的占用。
- 未区分控件整体高度与可用高度:
DataListInfo1.Height包含控件边框、标题栏等非行显示区域的高度,直接使用会导致可用高度计算错误。 - 未排除列标题高度:列标题栏的高度不属于行的显示区域,未减去这部分会进一步影响高度计算准确性。
修正代码
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
相关产品推荐
相关产品推荐

