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     /// </summary>
13     class myDataGridView : DataGridView
14     {
15         public myDataGridView()
16         {
17
18         }
19
20         public myDataGridView(Form _form)
21         {
22             this.Dock = DockStyle.Fill;//占满停靠
23             this.RowHeadersVisible = false;//隐藏行头
24             this.ColumnHeadersVisible = true;//隐藏列头
25             this.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//列样式
26             this.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;//行样式
27             this.AllowUserToAddRows = false;//隐藏添加行
28             this.SelectionMode = DataGridViewSelectionMode.FullRowSelect;//选择模式
29             this.ReadOnly = true;//只读
30             this.MultiSelect = false;//单选
31             //奇数行样式
32             this.AlternatingRowsDefaultCellStyle = new DataGridViewCellStyle
33             {
34                 BackColor = Color.Silver,
35                 SelectionForeColor = Color.White
36             };
37             //行重绘事件
38             this.RowPrePaint += new DataGridViewRowPrePaintEventHandler(myDataGridView_RowPrePaint);
39             _form.Controls.Add(this);
40         }
41         /// <summary>
42         /// 重绘DataGridView行
43         /// </summary>
44         /// <param name="sender"></param>
45         /// <param name="e"></param>
46         private void myDataGridView_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
47         {
48             //要重绘的部份
49             e.PaintParts &= ~DataGridViewPaintParts.Focus;
50             //选中行时
51             if ((e.State & DataGridViewElementStates.Selected) == DataGridViewElementStates.Selected)
52             {
53                 //区域
54                 Rectangle rowBounds = new Rectangle(
55                     this.RowHeadersWidth, e.RowBounds.Top,
56                     this.Columns.GetColumnsWidth(
57                         DataGridViewElementStates.Visible) -
58                     this.HorizontalScrollingOffset + 1,
59                     e.RowBounds.Height);
60                 //重绘区域
61                 using (Brush backbrush =
62                     new System.Drawing.Drawing2D.LinearGradientBrush(rowBounds,
63                         this.DefaultCellStyle.SelectionBackColor,
64                         e.InheritedRowStyle.ForeColor,
65                         System.Drawing.Drawing2D.LinearGradientMode.Horizontal))
66                 {
67                     e.Graphics.FillRectangle(backbrush, rowBounds);
68                 }
69             }
70         }
71
72     }
73 }
时间: 2024-12-21 03:10:46

C#重绘DataGridView行的相关文章

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

页面优化,谈谈重绘(repaint)和回流(reflow)

一.前言 偶尔在面试过程中遇到过重汇与回流reflow的问题,毕竟页面优化也是考核一个开发者能力的关键之一,上篇文章聊了下documentfragment也是为了减轻回流问题,那么本篇文章好好介绍下重绘和回流. 二.重绘和回流是什么 怎么去理解这两个概念呢?从字面上理解,重绘,重新绘画,重新上色,较难产生联想的是回流. 我们都知道,一个页面从加载到完成,首先是构建DOM树,然后根据DOM节点的几何属性形成render树(渲染树),当渲染树构建完成,页面就根据DOM树开始布局了,渲染树也根据设置的

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.

C# DataGridView 更改类型 重绘

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

Android视图状态及重绘流程分析,带你一步步深入了解View(三)

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17045157 在 前面一篇文章中,我带着大家一起从源码的层面上分析了视图的绘制流程,了解了视图绘制流程中onMeasure.onLayout.onDraw这三个最 重要步骤的工作原理,那么今天我们将继续对View进行深入探究,学习一下视图状态以及重绘方面的知识.如果你还没有看过我前面一篇文章,可以先去阅读 Android视图绘制流程完全解析,带你一步步深入了解View(二) .

窗体皮肤实现 - 重绘窗体非客户区(三)

窗体边框基本的绘制和控制完成,在第二篇中主要遗留的问题. 标题区域图标和按钮没绘制 缩放时客户区显示有问题 解决完下面的问题,皮肤处理基本完整.大致的效果GIF GIF中TShape的颜色表现有些问题,实际是正常的. 绘制标题区域内容 获取标题有效区域 绘制窗体图标 绘制按钮 绘制标题 标题区域主要考虑窗体是否在最大化状态,最大化后实际的标题绘制区域会有变化.可以通过 IsZoomed 或 GetWindowLong(Handle, GWL_STYLE) and WS_MAXIMIZE = WS

前端必备的浏览器知识(渲染过程、回流和重绘等)

常用哪几种浏览器测试?有哪些浏览器内核(Rendering Engine)? (Q1)浏览器:Chrome,IE,FireFox,Safari,Opera. (Q2)对应内核:Webkit,Trident,Gecko,Webkit,Presto.(国内的浏览器,除了傲游是直接基于Webkit开发的,其他基本都是基于谷歌在webkit上开发的Chromium,当然谷歌自己也是用的Chromium.另外值得的一提的是手机的系统(安卓.苹果)默认浏览器都是基于webkit内核的) 如何理解浏览器内核?

浏览器渲染页面的过程,以及重排和重绘(转)

前言 写得比我的文字好,有逻辑! 浏览器的渲染过程 1,浏览器解析html源码,然后创建一个 DOM树.在DOM树中,每一个HTML标签都有一个对应的节点,并且每一个文本也都会有一个对应的文本节点.DOM树的根节点就是 documentElement,对应的是html标签. 2,浏览器解析CSS代码,计算出最终的样式数据.对CSS代码中非法的语法她会直接忽略掉.解析CSS的时候会按照如下顺序来定义优先级:浏览器默认设置,用户设置,外链样式,内联样式,html中的style. 3,构建出DOM树,

WinForm中重绘TabControl选项卡标题

最近开发WinForm频繁使用了TabControl控件,这个控件的选项卡没有BackgroundImage这个属性,那么如何为其各个选项卡添加背景图片呢?(这里说的是每个TabPage的头部,也就是标题,不是工作区域.) 最开始用到TabControl的时候,我的每个选项卡是写死的,而后由于项目需求又动态添加了TabControl并生成各个选项卡,而两次我都要重绘其标题,因此在这里把我当时两种情形下重绘的方法通过一个例子一起分享出来. 首先先在窗体拖个Tabcontrol控件,然后更改了其Al