C# DataGridView显示行号

DataGridView默认的属性中,不可设置显示行号,因此需要用其他方法来实现。本文在这里介绍两种方法实现DataGridView显示行号,分享以供参考。个人比较推荐使用第一种方法来实现此功能,第二种方法在行号超过2位的时候,DataGridView的行指示符▶会把行号往右挤,导致显示不全,100的时候显示▶10。

第一种方法

使用DataGridView的RowPostPaint事件在RowHeaderCell中绘制行号:

代码中dataGridView控件名需要改成自己的,这种方法比较常用但缺点是在大数据量的时候性能比较差,每次滚动数据都会触发RowPostPaint事件。

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
            e.RowBounds.Location.Y,
            dataGridView1.RowHeadersWidth - 4,
            e.RowBounds.Height);

            TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), 
            dataGridView1.RowHeadersDefaultCellStyle.Font,
            rectangle,
            dataGridView1.RowHeadersDefaultCellStyle.ForeColor, 
            TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
        }

第二种方法是最简单的

一个事件(RowStateChanged)和一行代码即可实现:

 private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            e.Row.HeaderCell.Value = string.Format("{0}", e.Row.Index + 1);
        }   

但是这种方法在行号超过2位的时候,DataGridView的行指示符▶会把行号往右挤,导致显示不全,100的时候显示▶10。

解决的方法是将DataGridView的RowsHeaderWidthSizeMode属性设置为AutoSizeToAllHeaders或AutoSizeToDisplayedHeaders,这样自动设置宽度就不会出现行指示符挤压行号的情况了。(前两个属性不行的话可以尝试一下最后一个属性"AutoSizeToFirstHeader")

将DataGridView的RowsHeaderWidthSizeMode属性设置为AutoSizeToAllHeaders或AutoSizeToDisplayedHeaders后虽然行号显示全了但是行宽要比第一种方法多出一半看着不是很美观。

因为数据量不是很大最终采用了第一种方法。

参考链接:

登山亦有道 记录日常,每天进步一点点。 (chenyan98.cn)

让DataGridView显示行号 - 大眼睛 - 博客园 (cnblogs.com)

C# DataGridView显示行号的三种方法_xieyufei的专栏-CSDN博客_datagridview显示行号



© 版权声明
THE END
喜欢就支持一下吧
点赞1赞赏
分享
评论 抢沙发

请登录后发表评论