DataGridView高度自动调整
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);
DataGridView高度自动调整的更多相关文章
- DataGridView列的宽度、行的高度自动调整
注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. 介绍一下DataGridView列的宽度和行的高度,根据单元格或Header的内容(一般是内容全部被表示)自 ...
- 转:DataGridView列的宽度、行的高度自动调整
注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. 介绍一下DataGridView列的宽度和行的高度,根据单元格或Header的内容(一般是内容全部被表示)自 ...
- 【接上一篇】winform中dataGridView高度和宽度自适应填充完数据的高度和宽度,即dataGridView根据数据自适应大小
上一篇:winform中dataGridView高度自适应填充完数据的高度 winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度 ...
- winform中dataGridView高度自适应填充完数据的高度
// winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度是根据数据的多少而变动. 在load的时候,数据绑定后,加上如下代码: ...
- DataGridView使用技巧(七、设定列宽和行高自动调整)----.NET
DataGridView使用技巧(七.设定列宽和行高自动调整)----.NET 1) 设定行高和列宽自动调整 [VB.NET]' 设定包括Header和所有单元格的列宽自动调整DataGridView ...
- DataGridView控件的各种操作总结
一.单元格内容的操作 *****// 取得当前单元格内容 Console.WriteLine(DataGridView1.CurrentCell.Value); // 取得当前单元格的列 Index ...
- C#中dataGridView用法集
SqlConnection conn = new SqlConnection('Server=(local);DataBase=test;User=sa;Pwd=sa'); SqlDataAdapte ...
- DataGridView 行、列的隐藏和删除
) 行.列的隐藏 [VB.NET] ' DataGridView1的第一列隐藏 DataGridView1.Columns(0).Visible = False ' DataGridView1的第一行 ...
- DataGridView操作
C# DataGridView控件动态添加新行 DataGridView控件在实际应用中非常实用,特别需要表格显示数据时.可以静态绑定数据源,这样就自动为DataGridView控件添加相应的行.假如 ...
随机推荐
- 接口管理效率神器Apifox
前言 你是一个测试,你们团队目前开发模式是前后端分离. 某一天,版本V1.0接口评审完,发布在了swagger上,前后端各自进行开发.此时你根据接口文档将新接口迁移到JMeter上,然后开始编写接口测 ...
- 对抗防御之对抗样本检测(一):Feature Squeezing
引言 在之前的文章中,我们介绍了对抗样本和对抗攻击的方法.在该系列文章中,我们介绍一种对抗样本防御的策略--对抗样本检测,可以通过检测对抗样本来强化DNN模型.本篇文章论述其中一种方法:feature ...
- Check Directory Existence in Shell
The following command in one line can check if a directory exists. You can check the return value (& ...
- WPF自定义控件三:消息提示框
需求:实现全局消息提示框 一:创建全局Message public class Message { private static readonly Style infoStyle = (Style)A ...
- C语言中的stdin,stdout,stderr[转]
我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用.说到这不得不提及stdin,stdout,stderr.想想,我们在用C去写文件时的操作,Fil ...
- 模拟退火 Simulated annealing
模拟退火 Simulated annealing 看看有空把图片完善一下好了 模拟退火算法的一些背景 既然要说模拟退火算法,就应该说一下模拟退火算法的背景,模拟退火算法是局部搜索算法的一种扩展,该算法 ...
- noip16
<凉宫春日的忧郁>专场 T1 考试的时候连题面都没看懂,都没往图论这方面想,更别提最小生成树. 正解: 最小生成树prim,好像是什么欧几里得生成树,寒假时候的东西了,我直接找的blog看 ...
- 查看node.js全局安装的插件路径
查看 npm 全局插件 默认全局安装路径 参考:https://www.jianshu.com/p/f2873fcef5aa 首先 nodejs安装好之后,默认情况下会有如下配置 npm confi ...
- SpringBoot快速搭建流程
创建一个新项目 使用maven创建一个新项目 给定项目名称.finsh完成创建 跑起来SpringBoot 引入依赖parent > SpringBoot父级依赖,spring-boot-sta ...
- JDBC中的元数据
在我编写JDBC代码的时候:出现很多的重复的代码,有没有什么办法让我们能够编写出更加通用的JDBC代码呢?使用元数据,元数据能够让我们编写出更加通用的JDBC代码.什么是元数据呢?(三种元数据)1)连 ...