DataGridview中的CellPainting()方法一直死循环怎么解决

问题描述

privatevoiddgvSMT_CellPainting(objectsender,DataGridViewCellPaintingEventArgse){//定义字体FontMyFont=newFont("Arial",12,FontStyle.Bold);//定义字体颜色SolidBrushMdrawBrush=newSolidBrush(Color.White);//MainBoardSolidBrushSdrawBrush=newSolidBrush(Color.Black);//SensorBoard//横向全合并if(e.RowIndex==1||e.RowIndex==5||e.RowIndex==10||e.RowIndex==25){using(BrushgridBrush=newSolidBrush(this.dgvSMT.GridColor),backColorBrush=newSolidBrush(e.CellStyle.BackColor)){using(PengridLinePen=newPen(gridBrush)){if(e.ColumnIndex>=0){//清除线条e.Graphics.FillRectangle(backColorBrush,e.CellBounds);//绘右侧的线if(e.ColumnIndex==11){e.Graphics.DrawLine(gridLinePen,e.CellBounds.Right-1,e.CellBounds.Top,e.CellBounds.Right-1,e.CellBounds.Bottom-1);}//绘制值if(e.RowIndex==1&&e.ColumnIndex==0){e.Graphics.DrawString("MainBoard",MyFont,MdrawBrush,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}if(e.RowIndex==5&&e.ColumnIndex==0){e.Graphics.DrawString("SensorBoard",MyFont,SdrawBrush,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}if(e.RowIndex==10&&e.ColumnIndex==0){e.Graphics.DrawString("MainBoardFaillist",MyFont,MdrawBrush,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}if(e.RowIndex==25&&e.ColumnIndex==0){e.Graphics.DrawString("SensorBoardFaillist",MyFont,SdrawBrush,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}//下边缘的线e.Graphics.DrawLine(gridLinePen,e.CellBounds.Left,e.CellBounds.Bottom-1,e.CellBounds.Right-1,e.CellBounds.Bottom-1);e.Handled=true;}dgvSMT.Rows[1].DefaultCellStyle.BackColor=Color.FromArgb(0,128,0);dgvSMT.Rows[5].DefaultCellStyle.BackColor=Color.FromArgb(0,128,0);dgvSMT.Rows[10].DefaultCellStyle.BackColor=Color.FromArgb(0,128,0);dgvSMT.Rows[25].DefaultCellStyle.BackColor=Color.FromArgb(0,128,0);dgvSMT.Rows[4].DefaultCellStyle.BackColor=Color.FromArgb(255,255,0);dgvSMT.Rows[8].DefaultCellStyle.BackColor=Color.FromArgb(255,255,0);}}}}

会一直执行这个方法,死循环了,怎么才能只执行一次呢,??

解决方案

解决方案二:
自己定义一个标志,去判断这个标志,如果已绘制则改变状态为True,话说你为什么要求只执行一次呢,最好具体描述下你的需求
解决方案三:
你这代码哪里死循环了。。。一直执行cellpaint有可能是你单元格太多呗,每一个单元格都会触发这个事件
解决方案四:
引用楼主fz321的回复:

privatevoiddgvSMT_CellPainting(objectsender,DataGridViewCellPaintingEventArgse){//定义字体FontMyFont=newFont("Arial",12,FontStyle.Bold);//定义字体颜色SolidBrushMdrawBrush=newSolidBrush(Color.White);//MainBoardSolidBrushSdrawBrush=newSolidBrush(Color.Black);//SensorBoard//横向全合并if(e.RowIndex==1||e.RowIndex==5||e.RowIndex==10||e.RowIndex==25){using(BrushgridBrush=newSolidBrush(this.dgvSMT.GridColor),backColorBrush=newSolidBrush(e.CellStyle.BackColor)){using(PengridLinePen=newPen(gridBrush)){if(e.ColumnIndex>=0){//清除线条e.Graphics.FillRectangle(backColorBrush,e.CellBounds);//绘右侧的线if(e.ColumnIndex==11){e.Graphics.DrawLine(gridLinePen,e.CellBounds.Right-1,e.CellBounds.Top,e.CellBounds.Right-1,e.CellBounds.Bottom-1);}//绘制值if(e.RowIndex==1&&e.ColumnIndex==0){e.Graphics.DrawString("MainBoard",MyFont,MdrawBrush,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}if(e.RowIndex==5&&e.ColumnIndex==0){e.Graphics.DrawString("SensorBoard",MyFont,SdrawBrush,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}if(e.RowIndex==10&&e.ColumnIndex==0){e.Graphics.DrawString("MainBoardFaillist",MyFont,MdrawBrush,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}if(e.RowIndex==25&&e.ColumnIndex==0){e.Graphics.DrawString("SensorBoardFaillist",MyFont,SdrawBrush,e.CellBounds.X+2,e.CellBounds.Y+2,StringFormat.GenericDefault);}//下边缘的线e.Graphics.DrawLine(gridLinePen,e.CellBounds.Left,e.CellBounds.Bottom-1,e.CellBounds.Right-1,e.CellBounds.Bottom-1);e.Handled=true;}dgvSMT.Rows[1].DefaultCellStyle.BackColor=Color.FromArgb(0,128,0);dgvSMT.Rows[5].DefaultCellStyle.BackColor=Color.FromArgb(0,128,0);dgvSMT.Rows[10].DefaultCellStyle.BackColor=Color.FromArgb(0,128,0);dgvSMT.Rows[25].DefaultCellStyle.BackColor=Color.FromArgb(0,128,0);dgvSMT.Rows[4].DefaultCellStyle.BackColor=Color.FromArgb(255,255,0);dgvSMT.Rows[8].DefaultCellStyle.BackColor=Color.FromArgb(255,255,0);}}}}

会一直执行这个方法,死循环了,怎么才能只执行一次呢,??

这个用来做报表用。数据就比较大效率已经比较低了,再就是满屏的刷新亮瞎眼了
解决方案五:
引用2楼lc316546079的回复:

你这代码哪里死循环了。。。一直执行cellpaint有可能是你单元格太多呗,每一个单元格都会触发这个事件

+1

时间: 2024-11-01 07:30:33

DataGridview中的CellPainting()方法一直死循环怎么解决的相关文章

datagridview-DataGridview合并单元格的CellPainting()方法一直死循环

问题描述 DataGridview合并单元格的CellPainting()方法一直死循环 Winform 中的DataGridview使用CellPainting()方法,但是会一直重复的执行CellPainting()方法,都死循环了....请教下怎么解决. 解决方案 http://www.cnblogs.com/mapeng-11/archive/2011/03/03/1969947.html 解决方案二: DataGridView合并单元格DataGridView合并单元格Datagrid

android 全局异常处理 在onCreate方法中抛出异常后会出现死循环,请问怎么解决呢?

问题描述 android 全局异常处理 在onCreate方法中抛出异常后会出现死循环,请问怎么解决呢? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println(2/0); } 这是全局异常处理中的 Application package

java中this作为方法名的时候的问题,不知道我把它看成方法名正步正确

问题描述 java中this作为方法名的时候的问题,不知道我把它看成方法名正步正确 如下代码所示, public MyView(Context context) { this(context null); } //this在这里是方法吗,this是一个方法名吗? 解决方案 this用来调用你这个类中定义的一个构造方法 解决方案二: this不是方法名,而是Java中对当前对象的引用.例如当前对象的引用用this,父类对象的引用用super 解决方案三: 一个类中定义两个构造函数,在一个构造函数中

Python中的__new__()方法与实例化

__new__()是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解,在Python中 存在于类里面的构造方法__init__()负责将类的实例化,而在__init__()启动之前,__new__()决定是否 要使用该__init__()方法,因为__new__()可以调用其他类的构造方法或者直接返回别的对象来作为本类 的实例. 如果将类比喻为工厂,那么__init__()方法则是该工厂的生产工人,__init__()方法接受的初始化参 数则是生产所需原料,__init__()

c#-将datagridview中的值给一个数列

问题描述 将datagridview中的值给一个数列 if (comboBox2.Text == Convert .ToString ("ChiXiang_left")) { List<double> m_A_ChiXiangCeLiangZhi_XL_L = new List<double>(); //double[,] m_A_ChiXiangCeLiangZhi_XL_L = new double[N, M]; for (int j = 1; j <

c#-如何把datagridview中的数据保存到SQL数据库中?VB.NET或C#

问题描述 如何把datagridview中的数据保存到SQL数据库中?VB.NET或C# 如下图:已经实现从EXCEL导入数据到Datagridview中,现在要把其中的数据保存到数据库的AAAie表里面.请用代码说明,谢谢. 解决方案 取数据用ado.net保存到SQL Server数据库.http://blog.csdn.net/lysc_forever/article/details/7697536 解决方案二: 方法1.创建一个数据库,表,表名自取,表的字段和Excel相同,取Excel

vb.net连接sql数据库查询表格名显示到 DataGridView中,如何点击选择一个表名查询整个表的内容

问题描述 我的代码如下,怎么解决这个问题啊,想了很久.button1是查询表名,button2是查询选中的表内容PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.ClickDimstrConnectionAsString="Server=DELL-PCSQLEXPRESS;database=renshi;uid=ouqing;pwd=123;"Dimsql

datagridview-怎么删除DATAGRIDVIEW中字符为“0:00:00”的行

问题描述 怎么删除DATAGRIDVIEW中字符为"0:00:00"的行 要把某一列中含有字符"0:00:00"的行全部删除,出错了,请大家指正或者更好的方法.谢谢 解决方案 你可以直接从数据源判断,如果某条数据的Minimun knit time的值为0:0:0,则绑定该记录或者从数据源中移除该记录,再绑定. 解决方案二: 你的错是索引超出,看看访问Rows或Cell的索引对不对 解决方案三: 数据源是直接从CSV格式导入到DATAGRIDVIEW的,如果是在SQ

C#在dataGridView中动态添加一个combox

问题描述 急求大神!!我在dataGridVIew1的某一列中动态添加一个combox,然后出现下面的情况: 解决方案 解决方案二:publicComboBoxmycombo=newComboBox();//全局变量....form_load(...){mycombo.Name="mycombo";mycombo.Items.Clear();mycombo.Items.Add("三甲");mycombo.Items.Add("二甲");mycom