DataGridView自动调整行高失效问题求助
DataGridView行高自动适配不全的修复方案
手动触发行高重计算
控件初始化或数据更新后,自动计算可能存在延迟,直接调用API强制重算:// 对所有行生效 dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); // 仅针对有问题的行 // dataGridView1.AutoResizeRow(异常行索引, DataGridViewAutoSizeRowMode.AllCells);统一单元格样式参数
部分行异常可能是单元格内边距、字体不一致导致的计算偏差,检查并统一设置:// 全局设置单元格内边距 dataGridView1.DefaultCellStyle.Padding = new Padding(2, 2, 2, 2); // 针对特定列单独调整 dataGridView1.Columns["目标列名"].DefaultCellStyle.Padding = new Padding(3, 3, 3, 3);禁用表头视觉样式
系统视觉样式偶尔会干扰行高计算逻辑,尝试关闭表头视觉样式:dataGridView1.EnableHeadersVisualStyles = false;清理内容中的特殊控制字符
如果单元格内容包含\v、\f这类非常规换行/控制字符,会导致计算异常,提前清理:// 替换无效控制字符为空格 string cleanedContent = Regex.Replace(rawContent, @"[\v\f\a\b]", " ");自定义行高计算逻辑
若以上方法都无效,直接通过文本测量来手动计算行高:private void SetRowHeight(DataGridView dgv, int rowIndex) { var targetRow = dgv.Rows[rowIndex]; int calculatedHeight = 0; foreach (DataGridViewCell cell in targetRow.Cells) { if (cell.Value == null) continue; string cellText = cell.Value.ToString(); Font cellFont = cell.Style.Font ?? dgv.DefaultCellStyle.Font; // 测量文本在单元格宽度下的实际高度 Size textSize = TextRenderer.MeasureText(cellText, cellFont, new Size(cell.Size.Width, int.MaxValue), TextFormatFlags.WordBreak); // 加上内边距得到最终高度 int cellTotalHeight = textSize.Height + cell.Style.Padding.Top + cell.Style.Padding.Bottom; calculatedHeight = Math.Max(calculatedHeight, cellTotalHeight); } targetRow.Height = calculatedHeight; } // 数据绑定完成后调用 foreach (DataGridViewRow row in dataGridView1.Rows) { SetRowHeight(dataGridView1, row.Index); }
内容的提问来源于stack exchange,提问作者Loui
相关产品推荐
相关产品推荐

