WinForm自定义DataGrivew表格控件样式—以及添加行号
封装样式类
public class DataGrivewStyle
{
//行号
/// <summary>
/// 添加行号
/// datagridview 添加行号的事件里面 调用次方法, PostPaint在每次绘制行之后触发
/// </summary>
/// <param name="sender">datagrivew</param>
/// <param name="e">事件对象</param>
public static void DgvRowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
try
{
DataGridView grid = (DataGridView)sender;
//创建笔刷 grid.RowHeadersDefaultCellStyle.ForeColor 行单元格默认的字体颜色
SolidBrush brush = new SolidBrush(grid.RowHeadersDefaultCellStyle.ForeColor);
//e.RowIndex 行的索引
int index = e.RowIndex + 1;
//绘制行号
// e.Graphics 绘制对象
//DrawString 绘制字符串
//e.InheritedRowStyle.Font :继承过来的字体
// e.RowBounds.X + 18 绘制的x轴
e.Graphics.DrawString(index.ToString(), e.InheritedRowStyle.Font, brush, e.RowBounds.X + 18, e.RowBounds.Y + 10);
}
catch (Exception ex)
{
MessageBox.Show("添加行号的时候出现错误,网络出现问题");
}
}
//样式1
/// <summary>
/// 调用方法 传递控件即可
/// </summary>
/// <param name="dgv"></param>
public static void DGVStyle1(DataGridView dgv)
{
// 没有数据时候的背景颜色
//ButtonFace 按钮的颜色
dgv.BackgroundColor = System.Drawing.SystemColors.ButtonFace;
//有数据的背景颜色
dgv.RowsDefaultCellStyle.BackColor = System.Drawing.Color.Black;
//数据网格的颜色
dgv.GridColor = System.Drawing.Color.Red;
//设置边框
//DataGridViewHeaderBorderStyle.Single 单边框
//设置列标题边框
dgv.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
//设置行的边框
dgv.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
//禁止使用默认的样式
dgv.EnableHeadersVisualStyles = false;
// 列的高度
dgv.ColumnHeadersHeight = 35;
// 列的标题的颜色
dgv.ColumnHeadersDefaultCellStyle.ForeColor = System.Drawing.Color.Blue;
//列标题背景颜色
dgv.ColumnHeadersDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb((int)(byte)(255), (int)(byte)(255), (int)(byte)(128));
//所有字体添加一个颜色
for (int i = 0; i < dgv.Rows.Count; i++)
{
dgv.Rows[i].DefaultCellStyle.ForeColor = Color.Yellow;
}
}
//样式2
/// <summary>
/// 普通样式
/// 在需要使用该样式的地方,new 这个类对象,调用该方法,把 DataGridView 传递进来即可。
/// </summary>
public static void DgvStyle2(DataGridView dgv)
{
// 奇数行的背景色byte 范围是0-255,所以转换是安全的
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)(0))), ((int)((byte)(0))));
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 = 30;
}
//样式3
/// <summary>
/// 凹凸样式:需要手动设置 this.RowTemplate.DividerHeight = 2;
/// 在需要使用该样式的地方,new 这个类对象,调用该方法,把 DataGridView 传递进来即可。
/// </summary>
public static void DgvStyle3(DataGridView dgv)
{
// 奇数行的背景颜色
// dgv.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(((int)((byte)(128))), ((int)((byte)(255))), ((int)((byte)(255))));
// 单元格边框样式
dgv.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Sunken;
// 列标题的边框样式
dgv.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Sunken;
// System.Drawing.GraphicsUnit.Point 用于指定图形和文本的度量单位。
// Pixel, // 像素
//Point, // 打印机点 (1/72 英寸)
//Inch, // 英寸
//Document, // 文档单位 (1/300 英寸)
//Millimeter // 毫米
//((byte)(134))
// 常见字符集值:
//0: ANSI_CHARSET
//1: DEFAULT_CHARSET
//2: SYMBOL_CHARSE
//128: SHIFTJIS_CHARSET(日文)
//129: HANGEUL_CHARSET(韩文
//134: GB2312_CHARSET(简体中文)
//136: CHINESEBIG5_CHARSET(繁体中文)
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)));
// this.DefaultCellStyle.ForeColor = System.Drawing.Color.Black;
// this.DefaultCellStyle.BackColor = System.Drawing.SystemColors.ButtonFace;
dgv.RowTemplate.DividerHeight = 1;
// 禁止当前默认的视觉样式
dgv.EnableHeadersVisualStyles = false;
// 自动调整列宽
// this.AutoResizeColumns();
}
}
使用:
设置行号
//设置行号 需要绑定postPaint 重绘行的方法
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
DataGrivewStyle.DgvRowPostPaint(sender, e);//调用DataGrivewStyle类里面的重新绘制行号的方法
}
设置样式
//设置样式
DataGrivewStyle.DgvStyle2(dataGridView1); //调用DataGrivewStyle类里面的样式2的方法