zoukankan      html  css  js  c++  java
  • DataGridView显示行号的几种方法来自http://www.soaspx.com/dotnet/csharp/csharp_20100204_2740.html

    方法一:

    网上最常见的做法是用DataGridViewRowPostPaint事件在RowHeaderCell中绘制行号:

      private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
            {
                try
                {
                    //添加行号 
                    SolidBrush v_SolidBrush = new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor);
                    int v_LineNo = 0;
                    v_LineNo = e.RowIndex + 1;

                    string v_Line = v_LineNo.ToString();

                    e.Graphics.DrawString(v_Line, e.InheritedRowStyle.Font, v_SolidBrush, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5);

                }
                catch (Exception ex)
                {
                    MessageBox.Show("添加行号时发生错误,错误信息:" + ex.Message, "操作失败");
                }
            }

     

    但是这种方法在大数据量的时候性能比较差,每次滚动数据都会触发RowPostPaint事件。

     

     

    方法二:

    我的做法是给每行的HeaderCell赋值。

    在网上发现有人提到这种做法,但是因为最后的显示问题而选择了上面的方法。具体问题就是,在行号超过2位,如1001000,在选中该行时,DataGridView的行指示符会把行号往右挤,导致现实不全,100的时候显示 10

    其实还是RowsHeaderWidth的大小有问题,将该列的宽度放大,行号显示的也没问题!

    不知道他们有没有试过,上面绘制行号的方法在大行号的情况下显示也会有问题。

     

    既然知道问题所在就要找到相应的解决方法。

    具体做法是将DataGridViewRowsHeaderWidthSizeMode属性 设置为AutoSizeToAllHeaders或者AutoSizeToDisplayedHeaders,这样自动设置宽度就不会出现行指示符挤压行号的情况了。

     

    对于每次DataGridView的行变化,我们都去更新行号,用RowsAdded和RowsRemoved事件。

    代码如下:

     private void DataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
            {
                for (int i = 0; i < e.RowCount; i++)
                {
                    this.DataGridView1.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                    this.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++)
                {
                    this.DataGridView1.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                    this.DataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
                }
            }


            private void DataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
            {
                for (int i = 0; i < e.RowCount; i++)
                {
                    this.DataGridView1.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                    this.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++)
                {
                    this.DataGridView1.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                    this.DataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
                }
            }

  • 相关阅读:
    2018 ACM 网络选拔赛 徐州赛区
    2018 ACM 网络选拔赛 焦作赛区
    2018 ACM 网络选拔赛 沈阳赛区
    poj 2289 网络流 and 二分查找
    poj 2446 二分图最大匹配
    poj 1469 二分图最大匹配
    poj 3249 拓扑排序 and 动态规划
    poj 3687 拓扑排序
    poj 2585 拓扑排序
    poj 1094 拓扑排序
  • 原文地址:https://www.cnblogs.com/gisoracle/p/4243817.html
Copyright © 2011-2022 走看看