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];
}

浙公网安备 33010602011771号