程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 顯示DataGrid序號的一個適用的方法

顯示DataGrid序號的一個適用的方法

編輯:.NET實例教程
我在網上查了好幾個例子,如果數據量小的話沒有問題,一旦數據量大,顯示特別慢,還有個缺點就是拖動行高時行號不隨行高的變化而變動,出現是幾個序號在一個單元格中顯示。我自己對他們的算法進行總結,寫出一個效果比較不錯的帶序號的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,這樣用起來會特別方便,區區雕蟲小技,希望和大家共同分享。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved