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, "操作失败");
                }
            }
    
        }
    }
  • 相关阅读:
    初拾Java(问题一:404错误,页面找不到)
    新年新气象--总结过去,展望未来
    接口测试[整理]
    [转]SVN-版本控制软件
    浅谈黑盒测试和白盒测试
    Bug管理工具的使用介绍(Bugger 2016)
    P2805/BZOJ1565 [NOI2009]植物大战僵尸
    近期学习目标
    P3643/BZOJ4584 [APIO2016]划艇
    P5344 【XR-1】逛森林
  • 原文地址:https://www.cnblogs.com/yuwentao/p/13515722.html
Copyright © 2011-2022 走看看