显示DataGrid序号的一个适用的方法
2004-12-23 10:29
274 查看
作者Blog:http://blog.csdn.net/wangj2001/
如果数据量小的话没有问题,一旦数据量大,显示特别慢,还有个缺点就是拖动行高时行号不随行高的变化而变动,出现是几个序号在一个单元格中显示。我自己对他们的算法进行总结,写出一个效果比较不错的带序号的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,这样用起来会特别方便,区区雕虫小技,希望和大家共同分享。
如果数据量小的话没有问题,一旦数据量大,显示特别慢,还有个缺点就是拖动行高时行号不随行高的变化而变动,出现是几个序号在一个单元格中显示。我自己对他们的算法进行总结,写出一个效果比较不错的带序号的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,这样用起来会特别方便,区区雕虫小技,希望和大家共同分享。
相关文章推荐
- 显示DataGrid序号的一个适用的方法
- 显示DataGrid序号的一个适用的方法
- 显示DataGrid序号的一个适用的方法
- 显示DataGrid序号的一个适用的方法
- asp.net中显示DataGrid控件列序号的几种方法
- 关于点击某个字段的时候弹出一个dialog的方法(显示dialog里面datagrid的表的数据)
- asp.net的DataGrid中在每行依次显示序号的方法
- asp.net中显示DataGrid控件列序号的几种方法
- 检测屏幕颜色显示坏点的一个小方法。
- 写一个方法void triangle(int a,int b,int c),判断三个参数是否能构成一个三角形。如果不能则抛出异常IllegalArgumentException,显示异常信息:a,b,
- 一个简单的上传附件,并显示附件的方法.(JS的DOM操作取得input file的值.)
- 6.2判断一个数能否被3整除,如果不能整除就抛出一个异常,并让其调用方法来捕获,显示相应的处理信息
- Android自带播放器字符串显示乱码问题的一个解决方法
- easyui datagrid 没数据时显示滚动条的解决方法
- 通知栏Notification使用自定义视图方法(显示一个进度条ProgressBar)
- 在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递
- 编写一个手机类(Mobile),包括手机品牌(brand)、手机型号(type), 方法包括显示手机信息,并编写测试类进行对象的创建
- 项目中表中每条数据的序号显示自增的方法
- DataGrid的多种格式化显示方法
- 一个案例讲解:APK反编译重新打包后 -- 地图不显示;定位功能失效等解决方法