DataGrid(WinForm)显示行号最简单的方法

同样是重载OnPaint 方法,但是方法应该是比较巧妙的!而且不用担心标题是不是有显示,也不用去计算坐标,很方便的说!

  protected override void OnPaint(PaintEventArgs e)
  {
   base.OnPaint(e);

   if(this.DataSource!=null)
   {  
    if( this.VisibleRowCount == 0 )return;

    Rectangle currRct;

    int iRowCount = this.VisibleRowCount;     //这边有个错误 VisibleRowCount 仅限于可见的行

    string sText = "";

    int nowY = 0;

    for( int i = 0 ; i < iRowCount ; i++ )
    { 
     currRct = (Rectangle)this.GetCellBounds( i, 0 );
     nowY = currRct.Y + 2;
     sText = string.Format( " {0}", i+1 );   
     e.Graphics.DrawString( sText, this.Font, new SolidBrush(Color.Black), 10, nowY );
    }

   }
   }

===================================================================
上文发生错误的地方在于this.VisibleRowCount ,由VisibleRowCount 仅取到可见的行数,所以当行数超过了可视范围时,其余的行号就没有画出来了,那这个取行数的方法现在已做更正,哪位朋友如果说有更好的方法可以一起讨论.

更正后的实现方法如下:
===================================================================

using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace MyControls
{

 public class MyDataGrid : DataGrid
 {

  protected override void OnPaint(PaintEventArgs e)
  {

   base.OnPaint(e);

   DrawRowNumber( e );

  }
  private void DrawRowNumber( PaintEventArgs e )
  {

   if( this.DataSource!=null && this.VisibleRowCount != 0 )
   {  

    Rectangle currRct;

    int iRowCount = 0;

    switch( this.DataSource.GetType().ToString() )
    {
     case "System.Data.DataSet":    //绑定对象为DataSet
      iRowCount = ((DataSet)this.DataSource).Tables[this.DataMember].Rows.Count;
      break;
     case "System.Data.DataTable":    //绑定对象为DataTable
      iRowCount = ((DataTable)this.DataSource).Rows.Count;
      break; 
     case "System.Data.DataView":    //绑定对象为DataView
      iRowCount = ((DataView)this.DataSource).Count;
      break;
     default:        //其他的对象
      return;
    }

    for( int i = 0 ; i < iRowCount ; i++ )
    { 
     currRct = (Rectangle)this.GetCellBounds( i, 0 );
     e.Graphics.DrawString( string.Format( " {0}", i+1 ) , this.Font, new SolidBrush(Color.Black), 10, currRct.Y + 2 );
    }

   }
  }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值