顯示DataGrid序號的一個適用的方法
2024-07-21 02:20:09
供稿:網友
我在網上查了好幾個例子,如果數據量小的話沒有問題,一旦數據量大,顯示特別慢,還有個缺點就是拖動行高時行號不隨行高的變化而變動,出現是幾個序號在一個單元格中顯示。我自己對他們的算法進行總結,寫出一個效果比較不錯的帶序號的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,這樣用起來會特別方便,區區雕蟲小技,希望和大家共同分享。