C# DataGridView 显示行号

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

图片[1] - C# DataGridView显示行号 - 登山亦有道

第一种方法

使用 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
喜欢就支持一下吧
点赞3赞赏 分享
评论 抢沙发
匿名的头像 - 登山亦有道
提交
匿名的头像 - 登山亦有道

昵称

在 WordPress 上使用 Sticker Heo 增添互动时的乐趣吧 !

取消
昵称表情代码图片

    暂无评论内容