DataGridView重绘painting简单实例


private void dataGridViewX1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)

{

if (e.RowIndex >= 0 && e.ColumnIndex>=0)

{

Rectangle newRect = new Rectangle(e.CellBounds.X, e.CellBounds.Y, e.CellBounds.Width - 1, e.CellBounds.Height - 1);

Pen borderPen = new Pen(dataGridViewX1.GridColor,1);//线的颜色

Brush backColorBrush = new SolidBrush(e.CellStyle.BackColor);//非选中的背景色

if (dataGridViewX1.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected)

{

//选中的背景色

backColorBrush = new SolidBrush(System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(199)))), ((int)(((byte)(118))))));

}

e.Graphics.FillRectangle(backColorBrush, e.CellBounds);//用背景色填充单元格

if (e.ColumnIndex!=1)

{

//画上边线

e.Graphics.DrawLine(borderPen, e.CellBounds.Left, e.CellBounds.Top - 1, e.CellBounds.Right - 1, e.CellBounds.Top - 1);

//画下边线

e.Graphics.DrawLine(borderPen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);

// 画右边线

e.Graphics.DrawLine(borderPen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);

//e.PaintBackground(newRect,true);//画背景

//e.Graphics.DrawRectangle(borderPen, newRect);//画边框

}

else

{

if (e.RowIndex == 0)

{

//头

e.Graphics.DrawLine(new Pen(Color.Red, 4), e.CellBounds.Right - 2, (e.CellBounds.Top + e.CellBounds.Bottom) / 2, e.CellBounds.Right - 2, e.CellBounds.Bottom);

e.Graphics.DrawLine(new Pen(Color.Red, 3), e.CellBounds.Right - 8, (e.CellBounds.Top + e.CellBounds.Bottom) / 2, e.CellBounds.Right, (e.CellBounds.Top + e.CellBounds.Bottom) / 2);

}

if (e.RowIndex == 1)

{

//中

e.Graphics.DrawLine(new Pen(Color.Red, 4), e.CellBounds.Right - 2, e.CellBounds.Top, e.CellBounds.Right - 2, e.CellBounds.Bottom + 1);

}

if (e.RowIndex == 2)

{

//尾

e.Graphics.DrawLine(new Pen(Color.Red, 4), e.CellBounds.Right - 2, e.CellBounds.Top, e.CellBounds.Right - 2, (e.CellBounds.Top + e.CellBounds.Bottom) / 2);

e.Graphics.DrawLine(new Pen(Color.Red, 3), e.CellBounds.Right - 8, (e.CellBounds.Top + e.CellBounds.Bottom) / 2, e.CellBounds.Right, (e.CellBounds.Top + e.CellBounds.Bottom) / 2);

//画下边线

e.Graphics.DrawLine(borderPen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);

}

// 画右边线

e.Graphics.DrawLine(borderPen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);

}

if (e.Value != null)

{

e.PaintContent(newRect);//画内容

}

e.Handled = true;

}

}

效果图:

本文转载至,http://ruantnt.blog.163.com/blog/static/19052545220119185228153/

DataGridView重绘painting简单实例,布布扣,bubuko.com

时间: 2024-09-30 19:06:29

DataGridView重绘painting简单实例的相关文章

【Fanvas技术解密】HTML5 canvas实现脏区重绘

先说明一下,fanvas是笔者在企鹅公司开发的,即将开源的flash转canvas工具. 脏区重绘(dirty rectangle)并不是一门新鲜的技术了,这在最早2D游戏诞生的时候就已经存在. 复杂的术语或概念就不多说,简单说,脏区重绘就是每一帧绘制图形界面的时候,只重新绘制有变化的区域,而不是全屏刷新.很明显,这肯定能带来性能的提升. 举个例子,看下边两个图:   假设这里是动画的连续2帧,那么从第一帧到第二帧,其实变化的只有蝴蝶的区域.那么所谓的脏区就是两个图片的红色框之和,要把上一帧的蝴

前端性能优化之重排和重绘

一.重排 & 重绘 有经验的大佬对这个概念一定不会陌生,"浏览器输入URL发生了什么".估计大家已经烂熟于心了,从计算机网络到JS引擎,一路飞奔到浏览器渲染引擎. 经验越多就能理解的越深. 感兴趣的同学可以看一下这篇文章,深度和广度俱佳: <从输入 URL 到页面加载的过程?如何由一道题完善自己的前端知识体系!> 切回正题,我们继续探讨何为重排.浏览器下载完页面所有的资源后,就要开始构建DOM树,与此同时还会构建渲染树(Render Tree).(其实在构建渲染树之

简单的小重绘

1.当我们改变窗体的大小或者最小化窗体后为什么窗体不消失呢? 原因是画布是在顶级容器中画出来的,而顶级容器(所有的组件)也都是由系统画出来的,窗体组件在改变大小后,原来的窗体就已经不存在了(组件会自动重新绘制,我们自己画的图就会消失),我们看到的窗体是新绘制出来的窗体. 2.怎么解决图形消失的问题呢?   1.定义图形类,该类用来存储图形的数据.   2.你每画一个图形,就需要实例化一个图形对象,图形对象就要存储在数组中.   3.你在哪一个组件上绘制图形,那么就需要重写该组件的重绘(paint

C# 自定义重绘DataGridView

using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing; using System.Runtime.CompilerServices; using System.Drawing.Drawing2D; na

C#重绘DataGridView行

1 using System; 2 using System.Collections.Generic; 3 using System.Drawing; 4 using System.Linq; 5 using System.Text; 6 using System.Windows.Forms; 7 8 namespace Metrox.WinFrom.DataGridView 9 { 10 /// <summary> 11 /// 派生DataGridView 12 /// </summ

C# DataGridView 更改类型 重绘

DataGridView   更改类型 需要用到重绘 DataGridViewTextBoxColumn aa01 = new DataGridViewTextBoxColumn(); aa00.DataPropertyName = "题目"; //绑定数据源的名称 aa00.HeaderText = "题目00000"; //显示的名称 aa00.Name = "题目"; //列的名称 dataGridView1.Columns.Insert(

重写OnPaint事件对窗体重绘(显示gif动画) 实例2

/// <summary> /// 可显示Gif 的窗体 /// </summary> public class WinGif : Form { private Image _img = null; public Image Img { get { return _img; } set { _img = value; } } private EventHandler evtHandler = null; public WinGif(Image img) { //初始化设置 evtH

你真的了解回流和重绘吗

回流和重绘可以说是每一个web开发者都经常听到的两个词语,我也不例外,可是一直不是很清楚这两步具体做了什么事情.最近由于部门内部要做分享,所以对其进行了一些研究,看了一些博客和书籍,整理了一些内容并且结合自己的体会,写了这篇文章,希望可以帮助到大家. 浏览器的渲染过程 本文先从浏览器的渲染过程来从头到尾的讲解一下回流重绘,如果大家想直接看如何减少回流和重绘,可以跳到后面.(这个渲染过程来自MDN) 从上面这个图上,我们可以看到,浏览器渲染过程如下: 解析HTML,生成DOM树,解析CSS,生成C

【开发必看】你真的了解回流和重绘吗?

本文由云+社区发表 回流和重绘可以说是每一个web开发者都经常听到的两个词语,可是可能有很多人不是很清楚这两步具体做了什么事情.最近有空对其进行了一些研究,看了一些博客和书籍,整理了一些内容并且结合一些例子,写了这篇文章,希望可以帮助到大家. 浏览器的渲染过程 本文先从浏览器的渲染过程来从头到尾的讲解一下回流重绘,如果大家想直接看如何减少回流和重绘,优化性能,可以跳到后面.(这个渲染过程来自MDN) 浏览器渲染过程 添加描述 从上面这个图上,我们可以看到,浏览器渲染过程如下: 解析HTML,生成