zoukankan      html  css  js  c++  java
  • DataGridView 显示行号与背景颜色

    实现的方式有好几种。之前使用的是下面这种在RowPostPaint事件中实现,效率不高。每次改变控件尺寸时都会执行

    private void MsgGridView_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
    {
    DataGridView gdView = sender as DataGridView;
    System.Drawing.Rectangle rectangle = new System.Drawing.Rectangle(e.RowBounds.Location.X,
    e.RowBounds.Location.Y,
    gdView.RowHeadersWidth - 4,
    e.RowBounds.Height);
    
    TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(),
    gdView.RowHeadersDefaultCellStyle.Font,
    rectangle,
    gdView.RowHeadersDefaultCellStyle.ForeColor,
    TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
    }

    为了消除更新所带来的的闪屏问题,需要开启窗体和控件的双缓存,在窗体的构造函数中插入下面的代码。

    private IGForm()
    {
        //设置窗体的双缓冲
        this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);
        this.UpdateStyles();
    
    InitializeComponent();
        //
        //利用反射设置DataGridView的双缓冲
        Type dgvType = this.MsgGridView.GetType();
        PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
        BindingFlags.Instance | BindingFlags.NonPublic);
        pi.SetValue(this.MsgGridView, true, null);
    }

    ===========================================

    显示DataGridView背景颜色

    //单元格样式的BackColor方法设置背景色
    DataGridView.RowsDefaultCellStyle.BackColor = Color.LightSteelBlue;
    //奇数行样式的BackColor方法设置
    DataGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.LightSteelBlue;

     整合一下,封装到一个类中,方便调用

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    
    namespace SimpleDataGridView
    {
        /// <summary>
        /// 设置DataGridView的样式
        /// </summary>
        public class DataGridViewStyle
        {
            /// <summary>
            /// 普通的样式
            /// </summary>
            public void DgvStyle1(DataGridView dgv)
            {
                //奇数行的背景色
                dgv.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
                dgv.AlternatingRowsDefaultCellStyle.SelectionForeColor = System.Drawing.Color.Blue;
                dgv.AlternatingRowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(255)))));
                dgv.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                //默认的行样式
                dgv.RowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
                dgv.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(128)))), ((int)(((byte)(255)))));
                dgv.RowsDefaultCellStyle.SelectionForeColor = System.Drawing.Color.Blue;
                //数据网格颜色
                dgv.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
                //列标题的宽度
                dgv.ColumnHeadersHeight = 28;
            }
            /// <summary>
            /// 凹凸样式
            /// </summary>
            /// 需要手动设置this.RowTemplate.DividerHeight = 2;
            public void DgvStyle2(DataGridView dgv)
            {
                dgv.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Sunken;
                //列标题的边框样式
                dgv.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Sunken;
                dgv.ColumnHeadersDefaultCellStyle.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                dgv.ColumnHeadersDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
                dgv.ColumnHeadersHeight = 28;
                //行的边框样式
                dgv.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Sunken;
                dgv.DefaultCellStyle.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
                        dgv.RowTemplate.DividerHeight = 1;
                //禁止当前默认的视觉样式
                dgv.EnableHeadersVisualStyles = false;
            }
    
    
            /// <summary>
            /// 给DataGridView添加行号
            /// </summary>
            /// <param name="dgv"></param>
            /// <param name="e"></param>
            public static void DgvRowPostPaint(DataGridView dgv, DataGridViewRowPostPaintEventArgs e)
            {
                try
                {
                    //添加行号
                    SolidBrush v_SolidBrush = new SolidBrush(dgv.RowHeadersDefaultCellStyle.ForeColor);
                    int v_LineNo = 0;
                    v_LineNo = e.RowIndex + 1;
                    string v_Line = v_LineNo.ToString();
                    e.Graphics.DrawString(v_Line, e.InheritedRowStyle.Font, v_SolidBrush, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5);
                }
                catch (Exception ex)
                {
                    MessageBox.Show("添加行号时发生错误,错误信息:" + ex.Message, "操作失败");
                }
            }
    
        }
    }
  • 相关阅读:
    LoadRunner脚本关联动态数据的最简单方法
    LoadRunner 检查点函数总结
    算法(一)时间复杂度
    JAVA虚拟机总结
    java8中Lambda表达式和Stream API
    算法总结
    listview 异步加载图片并防止错位
    Java设计模式菜鸟系列(一)策略模式建模与实现
    Python基础--webbrowser
    Shiro学习(22)集成验证码
  • 原文地址:https://www.cnblogs.com/yuwentao/p/13515722.html
Copyright © 2011-2022 走看看