C#仿QQ皮肤-DataGridView 最新1.2版
2011-06-11 12:37 苏飞 阅读(7318) 评论(18) 编辑 收藏 举报阅读全文:http://www.sufeinet.com/thread-598-1-1.html
先来看看效果吧
![](https://images.cnblogs.com/cnblogs_com/sufei/cdg1736.jpg)
![](https://images.cnblogs.com/cnblogs_com/sufei/cdg1736.jpg)
![](https://images.cnblogs.com/cnblogs_com/sufei/cdg17366.jpg)
升级报告说明
这次升级的功能主有
1.对鼠标跟随效果进行的优化
2.增加了行号的功能方便查找数据
3.增加一个菜单功能,目前里面有的功能主要是冻结和恢复首行和首列功能。还有导出Excel和全选功能。
实现说明
首先我们要准备两张图片,用来做什么呢,自然是用来做菜单使用的。我是临时整理了两张看着不怎么好看,不过功能不影响大家下载源代码后要吧自行修改的漂亮一些。
然后我们第一步要做的是怎么样把这个图片添加到DataGridView里面去。在添加这个控件 之前呢我们要做两件事情,第一就是New一个左键菜单,绑定到这个菜单Button,
第二步是给这个button注册一个单击事件看下面的代码。
#region 注册菜单项
//在这里添加菜单项
cmsleft.Items.Add(createItem("clumnsFist", "冻结首列", new EventHandler(clumnsFist_Click)));
cmsleft.Items.Add(createItem("rowsFist", "冻结首行", new EventHandler(rowsFistFist_Click)));
cmsleft.Items.Add(createItem("officeExeceout", "导出到Excel", new EventHandler(officeExeceout_Click)));
cmsleft.Items.Add(createItem("fullSelect", "全选", new EventHandler(fullSelect_Click)));
#endregion
#region 绑定菜单
Button objpb = new Button();
objpb.BackgroundImage = bxyztSkin.Properties.Resources.caidan;
objpb.Location = new Point(objpb.Location.X + 9, objpb.Location.Y + 4);
objpb.Width = 17;
objpb.Text = "";
//绑定一个右键菜单
objpb.ContextMenuStrip = cmsleft;
objpb.Cursor = System.Windows.Forms.Cursors.Hand;
objpb.Height = 17;
objpb.BackgroundImageLayout = ImageLayout.Stretch;
objpb.FlatStyle = FlatStyle.Popup;
//在添加前先注册一个事件
objpb.Click += new EventHandler(objpb_Click);
this.Controls.Add(objpb);
#endregion
//在这里添加菜单项
cmsleft.Items.Add(createItem("clumnsFist", "冻结首列", new EventHandler(clumnsFist_Click)));
cmsleft.Items.Add(createItem("rowsFist", "冻结首行", new EventHandler(rowsFistFist_Click)));
cmsleft.Items.Add(createItem("officeExeceout", "导出到Excel", new EventHandler(officeExeceout_Click)));
cmsleft.Items.Add(createItem("fullSelect", "全选", new EventHandler(fullSelect_Click)));
#endregion
#region 绑定菜单
Button objpb = new Button();
objpb.BackgroundImage = bxyztSkin.Properties.Resources.caidan;
objpb.Location = new Point(objpb.Location.X + 9, objpb.Location.Y + 4);
objpb.Width = 17;
objpb.Text = "";
//绑定一个右键菜单
objpb.ContextMenuStrip = cmsleft;
objpb.Cursor = System.Windows.Forms.Cursors.Hand;
objpb.Height = 17;
objpb.BackgroundImageLayout = ImageLayout.Stretch;
objpb.FlatStyle = FlatStyle.Popup;
//在添加前先注册一个事件
objpb.Click += new EventHandler(objpb_Click);
this.Controls.Add(objpb);
#endregion
这样的话我们在运行这个控件时就可以看到菜单效果了,下面我们来分别对事件进行一下处理吧
1.Button单击事件
//Button单击事件
void objpb_Click(object sender, EventArgs e)
{
Button objbootn = (Button)sender;
//显示菜单的位置
objbootn.ContextMenuStrip.Show(Control.MousePosition.X, Control.MousePosition.Y);
}
void objpb_Click(object sender, EventArgs e)
{
Button objbootn = (Button)sender;
//显示菜单的位置
objbootn.ContextMenuStrip.Show(Control.MousePosition.X, Control.MousePosition.Y);
}
2.全选事件
//全选
void fullSelect_Click(object sender, EventArgs e)
{
this.SelectAll();
}
void fullSelect_Click(object sender, EventArgs e)
{
this.SelectAll();
}
3.导出到Excel事件
//导出到Excel
void officeExeceout_Click(object sender, EventArgs e)
{
if (this.Rows.Count > 0)
{
OfficeManagerMentServices.DataGridViewToExcel(this);
}
}
void officeExeceout_Click(object sender, EventArgs e)
{
if (this.Rows.Count > 0)
{
OfficeManagerMentServices.DataGridViewToExcel(this);
}
}
OfficeManagerMentServices类如下
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace bxyztSkin.csList
{
public class OfficeManagerMentServices
{
/// <summary>
/// 将 DataGridView的数据导出Excel
/// </summary>
/// <remarks>
/// using System.IO;
/// </remarks>
/// <param name="dgv"></param>
public static void DataGridViewToExcel(bxyztSkin.Editors.CDataGridView dgv)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Execl files (*.xls)|*.xls";
dlg.CheckFileExists = false;
dlg.CheckPathExists = false;
dlg.FilterIndex = 0;
dlg.RestoreDirectory = true;
dlg.CreatePrompt = false;
dlg.Title = "保存为Excel文件";
dlg.FileName = DateTime.Now.Ticks.ToString().Trim();
if (dlg.ShowDialog() == DialogResult.OK)
{
Stream myStream;
myStream = dlg.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
string columnTitle = "";
try
{
//写入列标题
for (int i = 0; i < dgv.ColumnCount; i++)
{
if (i > 0)
{
columnTitle += "\t";
}
columnTitle += dgv.Columns[i].HeaderText;
}
sw.WriteLine(columnTitle);
//写入列内容
for (int j = 0; j < dgv.Rows.Count; j++)
{
string columnValue = "";
for (int k = 0; k < dgv.Columns.Count; k++)
{
if (k > 0)
{
columnValue += "\t";
}
if (dgv.Rows[j].Cells[k].Value == null)
columnValue += "";
else
columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();
}
sw.WriteLine(columnValue);
}
sw.Close();
myStream.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
sw.Close();
myStream.Close();
}
}
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace bxyztSkin.csList
{
public class OfficeManagerMentServices
{
/// <summary>
/// 将 DataGridView的数据导出Excel
/// </summary>
/// <remarks>
/// using System.IO;
/// </remarks>
/// <param name="dgv"></param>
public static void DataGridViewToExcel(bxyztSkin.Editors.CDataGridView dgv)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Execl files (*.xls)|*.xls";
dlg.CheckFileExists = false;
dlg.CheckPathExists = false;
dlg.FilterIndex = 0;
dlg.RestoreDirectory = true;
dlg.CreatePrompt = false;
dlg.Title = "保存为Excel文件";
dlg.FileName = DateTime.Now.Ticks.ToString().Trim();
if (dlg.ShowDialog() == DialogResult.OK)
{
Stream myStream;
myStream = dlg.OpenFile();
StreamWriter sw = new StreamWriter(myStream, System.Text.Encoding.GetEncoding(-0));
string columnTitle = "";
try
{
//写入列标题
for (int i = 0; i < dgv.ColumnCount; i++)
{
if (i > 0)
{
columnTitle += "\t";
}
columnTitle += dgv.Columns[i].HeaderText;
}
sw.WriteLine(columnTitle);
//写入列内容
for (int j = 0; j < dgv.Rows.Count; j++)
{
string columnValue = "";
for (int k = 0; k < dgv.Columns.Count; k++)
{
if (k > 0)
{
columnValue += "\t";
}
if (dgv.Rows[j].Cells[k].Value == null)
columnValue += "";
else
columnValue += dgv.Rows[j].Cells[k].Value.ToString().Trim();
}
sw.WriteLine(columnValue);
}
sw.Close();
myStream.Close();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
finally
{
sw.Close();
myStream.Close();
}
}
}
}
}
4.冻结/恢复首列
//冻结/恢复首列
void clumnsFist_Click(object sender, EventArgs e)
{
if (this.Columns.Count >= 1)
{
for (int i = 0; i < this.Columns.Count; i++)
{
if (this.Columns[i].Visible == true)
{
if (this.Columns[i].Frozen)
{
this.Columns[i].Frozen = false;
((ToolStripMenuItem)sender).Text = "冻结首列";
return;
}
else
{
this.Columns[i].Frozen = true;
((ToolStripMenuItem)sender).Text = "恢复首列";
return;
}
}
}
}
}
void clumnsFist_Click(object sender, EventArgs e)
{
if (this.Columns.Count >= 1)
{
for (int i = 0; i < this.Columns.Count; i++)
{
if (this.Columns[i].Visible == true)
{
if (this.Columns[i].Frozen)
{
this.Columns[i].Frozen = false;
((ToolStripMenuItem)sender).Text = "冻结首列";
return;
}
else
{
this.Columns[i].Frozen = true;
((ToolStripMenuItem)sender).Text = "恢复首列";
return;
}
}
}
}
}
5.冻结/恢复首行
//冻结/恢复首行
void rowsFistFist_Click(object sender, EventArgs e)
{
if (this.Rows.Count >= 1)
{
if (this.Rows[0].Frozen)
{
this.Rows[0].Frozen = false;
((ToolStripMenuItem)sender).Text = "冻结首行";
}
else
{
this.Rows[0].Frozen = true;
((ToolStripMenuItem)sender).Text = "解冻首行";
}
}
}
void rowsFistFist_Click(object sender, EventArgs e)
{
if (this.Rows.Count >= 1)
{
if (this.Rows[0].Frozen)
{
this.Rows[0].Frozen = false;
((ToolStripMenuItem)sender).Text = "冻结首行";
}
else
{
this.Rows[0].Frozen = true;
((ToolStripMenuItem)sender).Text = "解冻首行";
}
}
}
还有一个提供创建新的菜单项的方法
/// <summary>
/// 创建新的菜单项
/// </summary>
/// <param name="name">菜单名</param>
/// <param name="Text">显示文字</param>
/// <param name="objEh">绑定事件</param>
/// <returns>返一个ToolStripMenuItem对象</returns>
private ToolStripMenuItem createItem(string name, string Text, EventHandler objEh)
{
System.Windows.Forms.ToolStripMenuItem lolumns = new System.Windows.Forms.ToolStripMenuItem();
lolumns.ForeColor = System.Drawing.Color.Black;
lolumns.Name = name;
lolumns.Size = new System.Drawing.Size(152, 24);
lolumns.Text = Text;
lolumns.Click += objEh;
return lolumns;
}
/// 创建新的菜单项
/// </summary>
/// <param name="name">菜单名</param>
/// <param name="Text">显示文字</param>
/// <param name="objEh">绑定事件</param>
/// <returns>返一个ToolStripMenuItem对象</returns>
private ToolStripMenuItem createItem(string name, string Text, EventHandler objEh)
{
System.Windows.Forms.ToolStripMenuItem lolumns = new System.Windows.Forms.ToolStripMenuItem();
lolumns.ForeColor = System.Drawing.Color.Black;
lolumns.Name = name;
lolumns.Size = new System.Drawing.Size(152, 24);
lolumns.Text = Text;
lolumns.Click += objEh;
return lolumns;
}
我把全部代码放上大家多多指教
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using bxyztSkin.csList;
namespace bxyztSkin.Editors
{
public partial class CDataGridView : System.Windows.Forms.DataGridView
{
/// <summary>
/// 类说明:CDataGridView控件的实现用来代替系统的DataGridView控件
/// 编码日期:2011-03-02
/// 编 码 人: 苏飞
/// 联系方式:361983679 Email:sufei.1013@163.com Blogs:http://sufei.cnblogs.com
/// </summary>
public CDataGridView()
{
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
}
//[Description("是否调用复制的开关,True为开启,False为不开启"), EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
//public Boolean clipboard { get; set; }
//[Description("复制的单元格号码从0开始"), EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
//public int clipboardnumber { get; set; }
//[Description("行号的颜色"), EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
//public Color RowIndexColor { get; set; }
protected override void OnCreateControl()
{
this.EnableHeadersVisualStyles = false;
this.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(247, 246, 239);
this.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Raised;
this.ColumnHeadersHeight = 26;
this.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
this.ColumnHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
this.ColumnHeadersDefaultCellStyle.ForeColor = System.Drawing.SystemColors.WindowText;
this.ColumnHeadersDefaultCellStyle.SelectionBackColor = System.Drawing.SystemColors.Highlight;
this.ColumnHeadersDefaultCellStyle.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
this.RowHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
this.RowHeadersDefaultCellStyle.BackColor = System.Drawing.SystemColors.Window;
this.RowHeadersDefaultCellStyle.ForeColor = System.Drawing.SystemColors.WindowText;
this.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
this.DefaultCellStyle.SelectionBackColor = Color.Wheat;
this.DefaultCellStyle.SelectionForeColor = Color.DarkSlateBlue;
this.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
this.GridColor = System.Drawing.SystemColors.GradientActiveCaption;
this.BackgroundColor = System.Drawing.SystemColors.Window;
this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.AllowUserToOrderColumns = true;
this.AutoGenerateColumns = true;
//奇数行的颜色
this.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(216, 229, 248);
base.OnCreateControl();
#region 菜单体
bxyztSkin.CControls.CContextMenuStrip cmsleft = new bxyztSkin.CControls.CContextMenuStrip();
cmsleft.Font = new System.Drawing.Font("微软雅黑", 10F);
cmsleft.Name = "cmsleft";
cmsleft.Size = new System.Drawing.Size(61, 4);
#endregion
#region 注册菜单项
//在这里添加菜单项
cmsleft.Items.Add(createItem("clumnsFist", "冻结首列", new EventHandler(clumnsFist_Click)));
cmsleft.Items.Add(createItem("rowsFist", "冻结首行", new EventHandler(rowsFistFist_Click)));
cmsleft.Items.Add(createItem("officeExeceout", "导出到Excel", new EventHandler(officeExeceout_Click)));
cmsleft.Items.Add(createItem("fullSelect", "全选", new EventHandler(fullSelect_Click)));
#endregion
#region 绑定菜单
Button objpb = new Button();
objpb.BackgroundImage = bxyztSkin.Properties.Resources.caidan;
objpb.Location = new Point(objpb.Location.X + 9, objpb.Location.Y + 4);
objpb.Width = 17;
objpb.Text = "";
//绑定一个右键菜单
objpb.ContextMenuStrip = cmsleft;
objpb.Cursor = System.Windows.Forms.Cursors.Hand;
objpb.Height = 17;
objpb.BackgroundImageLayout = ImageLayout.Stretch;
objpb.FlatStyle = FlatStyle.Popup;
//在添加前先注册一个事件
objpb.Click += new EventHandler(objpb_Click);
this.Controls.Add(objpb);
#endregion
}
#region 菜单项的事件集合
//全选
void fullSelect_Click(object sender, EventArgs e)
{
this.SelectAll();
}
//导出到Excel
void officeExeceout_Click(object sender, EventArgs e)
{
if (this.Rows.Count > 0)
{
OfficeManagerMentServices.DataGridViewToExcel(this);
}
}
//冻结/恢复首列
void clumnsFist_Click(object sender, EventArgs e)
{
if (this.Columns.Count >= 1)
{
for (int i = 0; i < this.Columns.Count; i++)
{
if (this.Columns[i].Visible == true)
{
if (this.Columns[i].Frozen)
{
this.Columns[i].Frozen = false;
((ToolStripMenuItem)sender).Text = "冻结首列";
return;
}
else
{
this.Columns[i].Frozen = true;
((ToolStripMenuItem)sender).Text = "恢复首列";
return;
}
}
}
}
}
//冻结/恢复首行
void rowsFistFist_Click(object sender, EventArgs e)
{
if (this.Rows.Count >= 1)
{
if (this.Rows[0].Frozen)
{
this.Rows[0].Frozen = false;
((ToolStripMenuItem)sender).Text = "冻结首行";
}
else
{
this.Rows[0].Frozen = true;
((ToolStripMenuItem)sender).Text = "解冻首行";
}
}
}
#endregion
/// <summary>
/// 创建新的菜单项
/// </summary>
/// <param name="name">菜单名</param>
/// <param name="Text">显示文字</param>
/// <param name="objEh">绑定事件</param>
/// <returns>返一个ToolStripMenuItem对象</returns>
private ToolStripMenuItem createItem(string name, string Text, EventHandler objEh)
{
System.Windows.Forms.ToolStripMenuItem lolumns = new System.Windows.Forms.ToolStripMenuItem();
lolumns.ForeColor = System.Drawing.Color.Black;
lolumns.Name = name;
lolumns.Size = new System.Drawing.Size(152, 24);
lolumns.Text = Text;
lolumns.Click += objEh;
return lolumns;
}
//Button单击事件
void objpb_Click(object sender, EventArgs e)
{
Button objbootn = (Button)sender;
//显示菜单的位置
objbootn.ContextMenuStrip.Show(Control.MousePosition.X, Control.MousePosition.Y);
}
#region 鼠标颜色
Color defaultcolor;
//移到单元格时的颜色
protected override void OnCellMouseMove(DataGridViewCellMouseEventArgs e)
{
base.OnCellMouseMove(e);
try
{
Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.YellowGreen;
}
catch { }
}
//进入单元格时保存当前的颜色
protected override void OnCellMouseEnter(DataGridViewCellEventArgs e)
{
base.OnCellMouseEnter(e);
try
{
defaultcolor = Rows[e.RowIndex].DefaultCellStyle.BackColor;
}
catch { }
}
//离开时还原颜色
protected override void OnCellMouseLeave(DataGridViewCellEventArgs e)
{
base.OnCellMouseLeave(e);
try
{
Rows[e.RowIndex].DefaultCellStyle.BackColor = defaultcolor;
}
catch { }
}
//在生成列表时添加一个行号,颜色默认为红色
protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
{
base.OnRowPostPaint(e);
//自动编号与数据库无关
Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, RowHeadersWidth - 4, e.RowBounds.Height);
TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), RowHeadersDefaultCellStyle.Font, rectangle,
Color.Red, TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter);
}
#endregion
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using bxyztSkin.csList;
namespace bxyztSkin.Editors
{
public partial class CDataGridView : System.Windows.Forms.DataGridView
{
/// <summary>
/// 类说明:CDataGridView控件的实现用来代替系统的DataGridView控件
/// 编码日期:2011-03-02
/// 编 码 人: 苏飞
/// 联系方式:361983679 Email:sufei.1013@163.com Blogs:http://sufei.cnblogs.com
/// </summary>
public CDataGridView()
{
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
}
//[Description("是否调用复制的开关,True为开启,False为不开启"), EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
//public Boolean clipboard { get; set; }
//[Description("复制的单元格号码从0开始"), EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
//public int clipboardnumber { get; set; }
//[Description("行号的颜色"), EditorBrowsable(EditorBrowsableState.Always), Browsable(true)]
//public Color RowIndexColor { get; set; }
protected override void OnCreateControl()
{
this.EnableHeadersVisualStyles = false;
this.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(247, 246, 239);
this.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Raised;
this.ColumnHeadersHeight = 26;
this.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
this.ColumnHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
this.ColumnHeadersDefaultCellStyle.ForeColor = System.Drawing.SystemColors.WindowText;
this.ColumnHeadersDefaultCellStyle.SelectionBackColor = System.Drawing.SystemColors.Highlight;
this.ColumnHeadersDefaultCellStyle.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
this.RowHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
this.RowHeadersDefaultCellStyle.BackColor = System.Drawing.SystemColors.Window;
this.RowHeadersDefaultCellStyle.ForeColor = System.Drawing.SystemColors.WindowText;
this.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
this.DefaultCellStyle.SelectionBackColor = Color.Wheat;
this.DefaultCellStyle.SelectionForeColor = Color.DarkSlateBlue;
this.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
this.GridColor = System.Drawing.SystemColors.GradientActiveCaption;
this.BackgroundColor = System.Drawing.SystemColors.Window;
this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
this.AllowUserToOrderColumns = true;
this.AutoGenerateColumns = true;
//奇数行的颜色
this.AlternatingRowsDefaultCellStyle.BackColor = Color.FromArgb(216, 229, 248);
base.OnCreateControl();
#region 菜单体
bxyztSkin.CControls.CContextMenuStrip cmsleft = new bxyztSkin.CControls.CContextMenuStrip();
cmsleft.Font = new System.Drawing.Font("微软雅黑", 10F);
cmsleft.Name = "cmsleft";
cmsleft.Size = new System.Drawing.Size(61, 4);
#endregion
#region 注册菜单项
//在这里添加菜单项
cmsleft.Items.Add(createItem("clumnsFist", "冻结首列", new EventHandler(clumnsFist_Click)));
cmsleft.Items.Add(createItem("rowsFist", "冻结首行", new EventHandler(rowsFistFist_Click)));
cmsleft.Items.Add(createItem("officeExeceout", "导出到Excel", new EventHandler(officeExeceout_Click)));
cmsleft.Items.Add(createItem("fullSelect", "全选", new EventHandler(fullSelect_Click)));
#endregion
#region 绑定菜单
Button objpb = new Button();
objpb.BackgroundImage = bxyztSkin.Properties.Resources.caidan;
objpb.Location = new Point(objpb.Location.X + 9, objpb.Location.Y + 4);
objpb.Width = 17;
objpb.Text = "";
//绑定一个右键菜单
objpb.ContextMenuStrip = cmsleft;
objpb.Cursor = System.Windows.Forms.Cursors.Hand;
objpb.Height = 17;
objpb.BackgroundImageLayout = ImageLayout.Stretch;
objpb.FlatStyle = FlatStyle.Popup;
//在添加前先注册一个事件
objpb.Click += new EventHandler(objpb_Click);
this.Controls.Add(objpb);
#endregion
}
#region 菜单项的事件集合
//全选
void fullSelect_Click(object sender, EventArgs e)
{
this.SelectAll();
}
//导出到Excel
void officeExeceout_Click(object sender, EventArgs e)
{
if (this.Rows.Count > 0)
{
OfficeManagerMentServices.DataGridViewToExcel(this);
}
}
//冻结/恢复首列
void clumnsFist_Click(object sender, EventArgs e)
{
if (this.Columns.Count >= 1)
{
for (int i = 0; i < this.Columns.Count; i++)
{
if (this.Columns[i].Visible == true)
{
if (this.Columns[i].Frozen)
{
this.Columns[i].Frozen = false;
((ToolStripMenuItem)sender).Text = "冻结首列";
return;
}
else
{
this.Columns[i].Frozen = true;
((ToolStripMenuItem)sender).Text = "恢复首列";
return;
}
}
}
}
}
//冻结/恢复首行
void rowsFistFist_Click(object sender, EventArgs e)
{
if (this.Rows.Count >= 1)
{
if (this.Rows[0].Frozen)
{
this.Rows[0].Frozen = false;
((ToolStripMenuItem)sender).Text = "冻结首行";
}
else
{
this.Rows[0].Frozen = true;
((ToolStripMenuItem)sender).Text = "解冻首行";
}
}
}
#endregion
/// <summary>
/// 创建新的菜单项
/// </summary>
/// <param name="name">菜单名</param>
/// <param name="Text">显示文字</param>
/// <param name="objEh">绑定事件</param>
/// <returns>返一个ToolStripMenuItem对象</returns>
private ToolStripMenuItem createItem(string name, string Text, EventHandler objEh)
{
System.Windows.Forms.ToolStripMenuItem lolumns = new System.Windows.Forms.ToolStripMenuItem();
lolumns.ForeColor = System.Drawing.Color.Black;
lolumns.Name = name;
lolumns.Size = new System.Drawing.Size(152, 24);
lolumns.Text = Text;
lolumns.Click += objEh;
return lolumns;
}
//Button单击事件
void objpb_Click(object sender, EventArgs e)
{
Button objbootn = (Button)sender;
//显示菜单的位置
objbootn.ContextMenuStrip.Show(Control.MousePosition.X, Control.MousePosition.Y);
}
#region 鼠标颜色
Color defaultcolor;
//移到单元格时的颜色
protected override void OnCellMouseMove(DataGridViewCellMouseEventArgs e)
{
base.OnCellMouseMove(e);
try
{
Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.YellowGreen;
}
catch { }
}
//进入单元格时保存当前的颜色
protected override void OnCellMouseEnter(DataGridViewCellEventArgs e)
{
base.OnCellMouseEnter(e);
try
{
defaultcolor = Rows[e.RowIndex].DefaultCellStyle.BackColor;
}
catch { }
}
//离开时还原颜色
protected override void OnCellMouseLeave(DataGridViewCellEventArgs e)
{
base.OnCellMouseLeave(e);
try
{
Rows[e.RowIndex].DefaultCellStyle.BackColor = defaultcolor;
}
catch { }
}
//在生成列表时添加一个行号,颜色默认为红色
protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
{
base.OnRowPostPaint(e);
//自动编号与数据库无关
Rectangle rectangle = new Rectangle(e.RowBounds.Location.X, e.RowBounds.Location.Y, RowHeadersWidth - 4, e.RowBounds.Height);
TextRenderer.DrawText(e.Graphics, (e.RowIndex + 1).ToString(), RowHeadersDefaultCellStyle.Font, rectangle,
Color.Red, TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter);
}
#endregion
}
}
本人的博客不再维护从2013年就不再维护了
需要我帮助的朋友请到我的个人论坛 http://www.sufeinet.com 进行讨论,感谢大家对我的支持!