C# DataGridView显示行号的三种方法
方法一:
网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号:
private void dgGrid_RowPostPaint( object sender, DataGridViewRowPostPaintEventArgs e )
{
var grid = sender as DataGridView;
var rowIdx = ( e.RowIndex + 1 ).ToString( );
var centerFormat = new StringFormat( )
{
// right alignment might actually make more sense for numbers
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
var headerBounds = new Rectangle( e.RowBounds.Left, e.RowBounds.Top, grid.RowHeadersWidth, e.RowBounds.Height );
e.Graphics.DrawString( rowIdx, this.Font, SystemBrushes.ControlText, headerBounds, centerFormat );
}
但是这种方法在大数据量的时候性能比较差,每次滚动数据都会触发RowPostPaint事件。
方法二:
我的做法是给每行的HeaderCell赋值。
在网上发现有人提到这种做法,但是因为最后的显示问题而选择了上面的方法。具体问题就是,在行号超过2位,如100、1000,在选中该行时,DataGridView的行指示符▶会把行号往右挤,导致现实不全,100的时候显示▶10。
其实还是RowsHeaderWidth的大小有问题,将该列的宽度放大,行号显示的也没问题!
不知道他们有没有试过,上面绘制行号的方法在大行号的情况下显示也会有问题。
既然知道问题所在就要找到相应的解决方法。
具体做法是将DataGridView的RowsHeaderWidthSizeMode属性设置为AutoSizeToAllHeaders或者AutoSizeToDisplayedHeaders,这样自动设置宽度就不会出现行指示符挤压行号的情况了。
对于每次DataGridView的行变化,我们都去更新行号,用RowsAdded和RowsRemoved事件。
代码如下:
private void dataGridView1_RowsAdded( object sender, DataGridViewRowsAddedEventArgs e )
{
for ( int i = 0; i < e.RowCount; i++ )
{
dataGridView1.Rows[ e.RowIndex + i ].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
dataGridView1.Rows[ e.RowIndex + i ].HeaderCell.Value = ( e.RowIndex + i + 1 ).ToString( );
}
for ( int i = e.RowIndex + e.RowCount; i < this.dataGridView1.Rows.Count; i++ )
{
dataGridView1.Rows[ i ].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
dataGridView1.Rows[ i ].HeaderCell.Value = ( i + 1 ).ToString( );
}
}
private void dataGridView1_RowsRemoved( object sender, DataGridViewRowsRemovedEventArgs e )
{
for ( int i = 0; i < e.RowCount; i++ )
{
dataGridView1.Rows[ e.RowIndex + i ].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
dataGridView1.Rows[ e.RowIndex + i ].HeaderCell.Value = ( e.RowIndex + i + 1 ).ToString( );
}
for ( int i = e.RowIndex + e.RowCount; i < this.dataGridView1.Rows.Count; i++ )
{
dataGridView1.Rows[ i ].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
dataGridView1.Rows[ i ].HeaderCell.Value = ( i + 1 ).ToString( );
}
}
方法三:
对于ReadOnly的Display,有更为简便的方法
private void dataGridView1_RowStateChanged( object sender, DataGridViewRowStateChangedEventArgs e )
{
e.Row.HeaderCell.Value = string.Format( "{0}", e.Row.Index + 1 );
}
C# DataGridView显示行号的三种方法的更多相关文章
- DataGridView显示行号的几种方法来自http://www.soaspx.com/dotnet/csharp/csharp_20100204_2740.html
方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号: private void dataGridView1_RowPostPai ...
- datalist、repearter、gridview显示行号的三种方法 或者是获取datalist行id
原文发布时间为:2009-05-06 -- 来源于本人的百度文章 [由搬家工具导入] 1. if you are using SQL Server, try select identity(int,1 ...
- Winform中的DatagridView显示行号
1.设置 RowPostPaint 为true 2.启用RowPostPaint事件 /// <summary> /// DataGridView显示行号 /// </summary ...
- Notepad++去除代码行号的几种方法
Notepad++去除代码行号的几种方法 (转自:http://hi.baidu.com/beer_zh/item/e70119309ee587f2a8842892)问:在网页中复制代码时,常常遇到高 ...
- DataGridView显示行号-RowPostPaint
DataGridView控件在显示数据时,我们有时候需要显示行号,以便检索查看方便使用. 但DataGridView默认没有设置显示行号的属性. 此时我们只要在DataGridView的RowPost ...
- DataGridView显示行号
//可以在DataGirdView的RowPostPaint事件中进行绘制. //如:添加以下方法代码 private void DrawRowIndex(object sender, DataGri ...
- Android Studio的使用(一)--显示行号、快速查找方法源
1.显示行号,只需要右击编辑窗体的边界就可以了.(这种方法只能临时显示,下次打开文件就没了,对其他文件也没用). 2.永久显示行号 3.查找某个变量.类.方法定义的源头,同时可以查找布局文件,资源文件 ...
- 【转】DataGridView显示行号
ref:http://blog.csdn.net/xieyufei/article/details/9769631 方法一: 网上最常见的做法是用DataGridView的RowPostPaint事件 ...
- 让DataGridView显示行号
http://www.cnblogs.com/JuneZhang/archive/2011/11/21/2257630.html 为了表示行号,我们可以在DataGridView的RowP ...
随机推荐
- python logging模块详解[转]
一.简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.war ...
- 10天学会phpWeChat——第四天:大U函数U()的使用
在第三天,我们创建了一个"增强版"的文章模块,实现了数据从数据库到视图端展示的流程.但是我们仅仅是实现了数据列表的展示,对于文章详情等页面跳转并未涉及. 本文重点讲解phpWeCh ...
- qt的moc,uic,rcc命令的使用
qt是一个c++的界面库,其特点就是其源码可以跨平台编译,这样在写自己的小工具时可以方便地在windows,mac或linux环境下移植了.在windows下写c++程序当然选vs,在mac下写程序当 ...
- docker底层技术概览
docker解决了云计算环境难于分发并且管理复杂,而用KVM.Xen等虚拟化又浪费系统资源的问题.Docker最初是基于lxc构建了容器引擎,为了提供跨平台支持,后又专门开发了libcontainer ...
- 【DNS】简单聊聊DNS如何工作
随便聊聊 我们知道,网络上传输的数据包是一层一层的包起来的,典型的是mac地址层,ip层,tcp/udp层,应用层数据 这么几个层,那用户在浏览器中打开www.baidu.com数据包如何传到baid ...
- .NET 开发快捷键大全
序号 快捷键 说明 1 Ctrl + Tab 切换当前编辑视图 2 Ctrl + Shift + Tab 反向切换当前编辑视图 3 F7 将窗体设计视图转成其代码视图 4 Shift + F7 将代码 ...
- SQL起别名
select列的时候取别名有三种方法,这三种方法并不是所有数据库都适用. 方法一.直接在字段名称后面加上别名,中间以空格隔开. 方法二.以as关键字指定字段别名,as在select的字段和别名之间. ...
- Spark BlockManager的通信及内存占用分析(源码阅读九)
之前阅读也有总结过Block的RPC服务是通过NettyBlockRpcServer提供打开,即下载Block文件的功能.然后在启动jbo的时候由Driver上的BlockManagerMaster对 ...
- Python创建cvs文件,包含标签和图片数据
在深度学习或者机器学习的时候,常常需要对数据进行整理和分类,最常见的是通过对数据路径和标签写入 到一个整合的txt或者csv文件中,训练进行读取. #coding=utf-8 #!/usr/bin/ ...
- win7下 安装 Flask
参考: http://my.oschina.net/935572630/blog/375758 一 环境版本: os: win7 x64 python: 2.7.10 x64 二 安装步骤: 由于fl ...