首页 技术 正文
技术 2022年11月14日
0 收藏 336 点赞 3,770 浏览 1623 个字

AutoResizeGrid.cs代码

    /// <summary>
/// 根据行数据,自动调整DataGridView高度
/// </summary>
public sealed partial class AutoResizeGrid
{
private readonly DataGridView DataGrid;
private readonly int MaxHeight;
/// <summary>
/// 是否自动调整
/// </summary>
private bool IsAutoResize = true; /// <summary>
/// 构造函数
/// </summary>
/// <param name="dataGridView"></param>
/// <param name="maxHeight">最大高度,-1 时不限制高度</param>
public AutoResizeGrid(DataGridView dataGridView, int maxHeight = -1)
{
this.DataGrid = dataGridView;
this.MaxHeight = maxHeight; if (this.IsAutoResize)
{
this.DataGrid.RowsAdded += DataGrid_RowsAdded;
}
} /// <summary>
/// 行添加后事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGrid_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
this.UpdateGridHeight();
} /// <summary>
/// 计算实际高度
/// </summary>
/// <returns></returns>
public int GetFactHeight()
{
// 计算实际高度
var rowsHeight = this.DataGrid.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
var headHeight = this.DataGrid.ColumnHeadersHeight; return (rowsHeight + headHeight);
} /// <summary>
/// 更新高度,调用时机,添加数据行后调用
/// </summary>
private void UpdateGridHeight()
{
// 计算实际高度
// 多增加一行,否则会有滚动条
var factHeight = this.GetFactHeight() + this.GetHScrollBarHeight();
if (-1 == this.MaxHeight)
{
this.DataGrid.Height = factHeight;
}
else
{
this.DataGrid.Height = Math.Min(this.MaxHeight, factHeight);
}
}
/// <summary>
/// 获取水平滚动条高度
/// </summary>
/// <returns></returns>
private int GetHScrollBarHeight()
{
var height = 2;
foreach (Control ctrl in this.DataGrid.Controls)
{
if (ctrl.AccessibilityObject.ToString().IndexOf("System.Windows.Forms.HScrollBar") > 0)
{
if (ctrl.Visible)
{
// do something
return (height + ctrl.Height);
}
}
} return height;
}
}

使用方式

new AutoResizeGrid(this.dataGridView1, maxHeight: 200);
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,484
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,899
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,732
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,485
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,125
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,286