winform中DataGirdView添加行号,根据某列的值改变颜色提示,奇偶数变色

1,添加行号效果展示,根据某列的值改变颜色提示效果展示

 

2,界面UI设置

  行标题单元格样式要与默认单元格样式设置一致。

3,添加RowPostPaint事件

        //DataGridView所有单元格发生绘制的后的事件
        private void dgv_data_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
        {
            AutomaticStoreMotionDal.DataGridViewHelper.DgvRowPostPaint(this.dgv_data, e);
//日志类型为操作记录的红色展示 AutomaticStoreMotionDal.DataGridViewHelper.DgvRowStyleWithResult(this.dgv_data, "日志类型", "操作记录", Color.Red); }

4,DataGridViewStyleHelper类

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AutomaticStoreMotionDal
{
    public class DataGridViewHelper
    {
        /// <summary>
        /// 普通的样式
        /// </summary>      
        public static 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 static 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>
        /// 参数设置
        /// </summary>      
        public static void DgvStyle3(DataGridView dgv)
        {
            //奇数行的背景色
            dgv.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (26)))),
                ((int) (((byte) (29)))), ((int) (((byte) (48)))));
            dgv.AlternatingRowsDefaultCellStyle.SelectionBackColor =
                System.Drawing.Color.FromArgb(((int) (((byte) (115)))), ((int) (((byte) (168)))),
                    ((int) (((byte) (223)))));

            //默认的行样式
            dgv.RowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (42)))),
                ((int) (((byte) (42)))), ((int) (((byte) (71)))));
            dgv.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(((int) (((byte) (115)))),
                ((int) (((byte) (168)))), ((int) (((byte) (223)))));
            //dgv.RowsDefaultCellStyle.SelectionForeColor = System.Drawing.Color.Blue;
            //数据网格颜色
            dgv.GridColor = System.Drawing.Color.FromArgb(((int) (((byte) (214)))), ((int) (((byte) (214)))),
                ((int) (((byte) (214)))));
            //列标题的宽度
            dgv.ColumnHeadersHeight = 28;

        }

        /// <summary>
        /// 数据报表
        /// </summary>      
        public static void DgvStyle4(DataGridView dgv)
        {
            //奇数行的背景色
            dgv.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (26)))),
                ((int) (((byte) (29)))), ((int) (((byte) (48)))));
            dgv.AlternatingRowsDefaultCellStyle.SelectionBackColor =
                System.Drawing.Color.FromArgb(((int) (((byte) (26)))), ((int) (((byte) (29)))),
                    ((int) (((byte) (48)))));

            //默认的行样式
            dgv.RowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (42)))),
                ((int) (((byte) (42)))), ((int) (((byte) (71)))));
            dgv.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(((int) (((byte) (42)))),
                ((int) (((byte) (42)))), ((int) (((byte) (71)))));
            //dgv.RowsDefaultCellStyle.SelectionForeColor = System.Drawing.Color.Blue;
            //数据网格颜色
            //dgv.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(214)))), ((int)(((byte)(214)))), ((int)(((byte)(214)))));

        }

        /// <summary>
        /// 故障报警
        /// </summary>
        /// <param name="dgv"></param>
        public static void DgvStyle5(DataGridView dgv)
        {
            //奇数行的背景色
            dgv.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (68)))),
                ((int) (((byte) (88)))), ((int) (((byte) (124)))));
            dgv.AlternatingRowsDefaultCellStyle.SelectionBackColor =
                System.Drawing.Color.FromArgb(((int) (((byte) (68)))), ((int) (((byte) (88)))),
                    ((int) (((byte) (124)))));

            //默认的行样式
            dgv.RowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (44)))),
                ((int) (((byte) (61)))), ((int) (((byte) (90)))));
            dgv.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(((int) (((byte) (44)))),
                ((int) (((byte) (61)))), ((int) (((byte) (90)))));
            //dgv.RowsDefaultCellStyle.SelectionForeColor = System.Drawing.Color.Blue;
            //数据网格颜色
            dgv.GridColor = System.Drawing.Color.FromArgb(((int) (((byte) (214)))), ((int) (((byte) (214)))),
                ((int) (((byte) (214)))));
            //列标题的宽度
            dgv.ColumnHeadersHeight = 28;
        }

        /// <summary>
        /// 报警记录
        /// </summary>      
        public static void DgvStyle6(DataGridView dgv)
        {
            //奇数行的背景色
            dgv.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (26)))),
                ((int) (((byte) (29)))), ((int) (((byte) (48)))));
            dgv.AlternatingRowsDefaultCellStyle.SelectionBackColor =
                System.Drawing.Color.FromArgb(((int) (((byte) (26)))), ((int) (((byte) (29)))),
                    ((int) (((byte) (48)))));

            //默认的行样式
            dgv.RowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (42)))),
                ((int) (((byte) (42)))), ((int) (((byte) (71)))));
            dgv.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(((int) (((byte) (42)))),
                ((int) (((byte) (42)))), ((int) (((byte) (71)))));
            //dgv.RowsDefaultCellStyle.SelectionForeColor = System.Drawing.Color.Blue;
            //数据网格颜色
            //dgv.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(214)))), ((int)(((byte)(214)))), ((int)(((byte)(214)))));

        }

        /// <summary>
        /// 实时报警
        /// </summary>
        /// <param name="dgv"></param>
        public static void DgvStyle7(DataGridView dgv)
        {
            //奇数行的背景色
            dgv.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (68)))),
                ((int) (((byte) (88)))), ((int) (((byte) (124)))));
            dgv.AlternatingRowsDefaultCellStyle.SelectionBackColor =
                System.Drawing.Color.FromArgb(((int) (((byte) (68)))), ((int) (((byte) (88)))),
                    ((int) (((byte) (124)))));

            //默认的行样式
            dgv.RowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int) (((byte) (44)))),
                ((int) (((byte) (61)))), ((int) (((byte) (90)))));
            dgv.RowsDefaultCellStyle.SelectionBackColor = System.Drawing.Color.FromArgb(((int) (((byte) (44)))),
                ((int) (((byte) (61)))), ((int) (((byte) (90)))));
            //dgv.RowsDefaultCellStyle.SelectionForeColor = System.Drawing.Color.Blue;
            //数据网格颜色
            dgv.GridColor = System.Drawing.Color.FromArgb(((int) (((byte) (214)))), ((int) (((byte) (214)))),
                ((int) (((byte) (214)))));
            //列标题的宽度
            dgv.ColumnHeadersHeight = 28;
        }

        /// <summary>
        /// 根据某列(列标题)的结果值(列的值)改变颜色
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="headerText">列标题</param>
        /// <param name="resut">列的值</param>
        /// <param name="color">颜色</param>
        public static void DgvRowStyleWithResult(DataGridView dgv,string headerText, string resut, Color color)
        {

            if (dgv.RowCount > 0)
            {
                for (int c = 0; c < dgv.ColumnCount; c++)
                {
                    if (dgv.Columns[c].HeaderText == headerText)
                    {
                        for (int i = 0; i < dgv.RowCount; i++)
                        {
                            if (dgv.Rows[i].Cells[c].Value.ToString() == resut)
                            {
                                dgv.Rows[i].DefaultCellStyle.BackColor = color;
                                dgv.Rows[i].DefaultCellStyle.ForeColor = SystemColors.HighlightText;
                                dgv.Rows[i].DefaultCellStyle.SelectionBackColor = color;
                                dgv.Rows[i].DefaultCellStyle.SelectionForeColor = SystemColors.HighlightText;
                            }
                        }
                    }
                }

            }
        }


        /// <summary>
        /// 给DataGridView添加行号
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="e"></param>
        public static void DgvRowPostPaint(DataGridView dgv, DataGridViewRowPostPaintEventArgs e)
        {
            try
            {
                //设置行标题可见
                dgv.RowHeadersVisible = true;

                //添加行号
                //SolidBrush v_SolidBrush = new SolidBrush(dgv.RowHeadersDefaultCellStyle.ForeColor);
                SolidBrush v_SolidBrush = new SolidBrush(dgv.DefaultCellStyle.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);
                e.Graphics.DrawString(v_Line, dgv.DefaultCellStyle.Font, v_SolidBrush, e.RowBounds.Location.X + 15,e.RowBounds.Location.Y + 5);
            }
            catch (Exception ex)
            {
                MessageBox.Show("添加行号时发生错误,错误信息:" + ex.Message, "操作失败");
            }
        }

        /// <summary>
        /// 给DataGridView添加行号2
        /// </summary>
        /// <param name="dgv"></param>
        /// <param name="e"></param>
        public static void DgvRowPostPaint2(DataGridView dgv, DataGridViewRowPostPaintEventArgs e)
        {
            try
            {
                //设置行标题可见
                dgv.RowHeadersVisible = true;

                //添加行号
                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,
                    e.RowBounds.Location.Y); //参数3和4是行号文本在单元格的位置
            }
            catch (Exception ex)
            {
                MessageBox.Show("添加行号时发生错误,错误信息:" + ex.Message, "操作失败");
            }
        }

    }
}

 

添加行号方式2:

            //加载表格
            for (int i = 0; i < torqueList.Count(); i++)
            {
                dgv_data.Rows.Add();
                dgv_data.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight;
                dgv_data.Rows[i].HeaderCell.Value = (i + 1).ToString();//这种方式添加行号特别慢,影响性能,不推荐使用
                dgv_data.Rows[i].Cells[0].Value = torqueList[i];
                dgv_data.Rows[i].Cells[1].Value = angleList[i];
            }

  

 

 

  

  

 

posted @ 2020-06-06 17:10  包子789654  阅读(379)  评论(1编辑  收藏  举报