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