首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
coofucoo (105)
Drate (69)
CSDN - 文档中心 - .NET 阅读:8255   评论: 5    参与评论
标题   显示DataGrid序号的一个适用的方法     选择自 wangj2001 的 Blog
关键字   C#,DataGrid
出处  

我在网上查了好几个例子,如果数据量小的话没有问题,一旦数据量大,显示特别慢,还有个缺点就是拖动行高时行号不随行高的变化而变动,出现是几个序号在一个单元格中显示。我自己对他们的算法进行总结,写出一个效果比较不错的带序号的DataGrid。原理:只显示表格中显示行的序号,并且拖动行,行号一起移动。

override protected void OnPaint(PaintEventArgs e)

{

base.OnPaint(e);

    try

    {

        if(this.DataSource!=null)

        {          

        int yDelta;

        System.Drawing .Rectangle cell=this.GetCellBounds(0,0);

        int y=cell.Top +2;

        e.Graphics.DrawString("编号", this.Font, new SolidBrush(Color.Black), 8, y-18); //

        if(this.VisibleRowCount >0)//只在有记录集时在表格中显示序号

        {                  

            CurrencyManager cm;

            cm = (CurrencyManager) this.BindingContext[this.DataSource, this.DataMember];

            if(cm.Count >0)

            {                      

                int nRow=-1;

                y=41;           //为第一行默认高度

                while(nRow<0)

                {

nRow=this.HitTest (8,y).Row ;

                    y++;

                }

                int nCount=0;

                while(y<this.Height && nCount<this.VisibleRowCount )

                {

                    string text = string.Format("{0}", nRow+nCount+1);

                    e.Graphics.DrawString(text, this.Font, new SolidBrush(Color.Black), 10, y);

                    yDelta = this.GetCellBounds( nRow+nCount,0).Height + 1;//****表示一行高度的参数

                    y += yDelta;

//如果下面有子行显示序号的区分显示  

                    if(this.IsExpanded (nRow+nCount)&& nRow+nCount+1<cm.Count )                                 {

                        y+=this.GetCellBounds (nRow+nCount+1,0).Height +3;

                    }

                    nCount++;      

                }

}

        }

        }

    }

    catch

    {}

}

重载了DataGrid中的Paint,这样用起来会特别方便,区区雕虫小技,希望和大家共同分享。

我的Email:gangleader@126.com


相关文章
对该文的评论
milon517 ( 2005-08-24)
有问题,当拉动DATAGRID的滚动条的时候,序号有时会消失,点击上面才又出现
CSDN 网友 ( 2005-05-31)
这个函数怎么引用呀?
CSDN 网友 ( 2005-02-24)
哇。。。高手。。。。
CSDN 网友 ( 2004-12-27)
高人一筹哇!
napsoft ( 2004-11-29)
以前一直没写成功,看过后明白了!