WinForm"DataGridView单元格提示和相关应用" 之配餐系统的开发

  在winform应用程序开发中,DataGridView是 用的较多的、也(几乎)是数据(列表)显示必用的控件,而此文就是针对DataGridView控件的一些使用做些讲解。

        一. DataGridView单元格提示

        这个熟悉的朋友会选择CellToolTipTextNeeded 事件实现,也确实,然而此事件有个硬性的条件(或者说 让人感觉很不舒服的限制),如图:

   上图中 红色区域[具体见msdn:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.datagridview.celltooltiptextneeded(VS.80).aspx]就是我所说的限制,这样当我们想实现用代码一行行add Row时,此事件就与我们想要的发生冲突(无法实现单元格提示) ——因为在 DataGridView绑定的数据源(设置了 DataSource)后 或 该控件的 VirtualMode 属性为 true (此时行数无法改变),不能再动态添加行,但我们想要的 单元格提示效果必须还得想办法实现(在最初遇到此问题时,感觉有点儿'山穷水尽疑无路'),而后静下心去想,终用DataGridView的CellMouseEnter事件解决,代码如下:

   

代码
   
   
canInfoDgv.CellMouseEnter += new DataGridViewCellEventHandler(canInfoDgv_CellMouseEnter);

void canInfoDgv_CellMouseEnter( object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > - 1 )
{
DataGridView dgv
= (DataGridView)sender;
DataGridViewCell cellObj
= dgv.Rows[e.RowIndex].Cells[e.ColumnIndex];
switch (dgv.Columns[e.ColumnIndex].Name)
{
case " colswName " : cellObj.ToolTipText = " 点击浏览此食物详细信息! " ; break ;
case " colswWeight " : cellObj.ToolTipText = " 点击编辑此食物重量! " ; Console.WriteLine( " canInfoDgv_CellMouseEnter : " + cellObj.Value.ToString()); break ; //
case " colswYl " : SetColswYl_ToolTip(cellObj); break ;
case " colEdit " : cellObj.ToolTipText = " 点击编辑菜肴的组成! " ; break ;
case " colDo " : cellObj.ToolTipText = " 点击删除此食物! " ; break ;
default : break ;
}
dgv
= null ;
cellObj
= null ;
}
}

 

运行效果:

 

 

       2.DataGridView属性设置的通用方法

     

代码
   
   
/// <summary>
/// 设置DataGridView通用属性
/// </summary>
/// <param name="dgv"></param>
protected void SetDgv_Com(DataGridView dgv)
{
dgv.AllowUserToAddRows
= false ;
dgv.AllowUserToResizeColumns
= false ;
dgv.AllowUserToResizeRows
= false ;
dgv.RowHeadersVisible
= false ;
dgv.EditMode
= DataGridViewEditMode.EditOnEnter;
// 绑定时不自动创建列(解决列的位置不固定)
dgv.AutoGenerateColumns = false ;
}

/// <summary>
/// 设置DataGridView交替行样式
/// </summary>
/// <param name="dgv"></param>
/// <param name="deRowColor"> 默认行颜色 </param>
/// <param name="altRowColor"> 交替行颜色 </param>
protected void SetDgv_AlternatingRowColor(DataGridView dgv, Color deRowColor, Color altRowColor)
{
dgv.RowsDefaultCellStyle.BackColor
= deRowColor;
dgv.AlternatingRowsDefaultCellStyle.BackColor
= altRowColor;
}

/// <summary>
/// 设置 DataGridView 特殊样式 [无边框 内容居中 设置表头背景色]
/// </summary>
protected void SetDgv_SpecialStyle(DataGridView dgvObj, Color HeaderBgColor,Color selectedCellBgColor)
{
SetDgv_SpecialStyle(dgvObj, HeaderBgColor, selectedCellBgColor, System.Drawing.SystemColors.Window,
true );
}

/// <summary>
/// 设置 DataGridView 特殊样式 [无边框 内容居中 设置表头背景色]
/// </summary>
protected void SetDgv_SpecialStyle(DataGridView dgvObj, Color HeaderBgColor, Color selectedCellBgColor,Color bgColor, bool isNoBorder)
{
dgvObj.BackgroundColor
= bgColor;
if (isNoBorder)
{
dgvObj.BorderStyle
= BorderStyle.None;
dgvObj.CellBorderStyle
= DataGridViewCellBorderStyle.None;
dgvObj.ColumnHeadersBorderStyle
= DataGridViewHeaderBorderStyle.None;
}

// 设置单元格内容居中显示 ColumnHeadersDefaultCellStyle:是设置列标题的样式
dgvObj.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
if (selectedCellBgColor != null )
dgvObj.DefaultCellStyle.SelectionBackColor
= selectedCellBgColor;

dgvObj.DefaultCellStyle.SelectionForeColor
= Color.Black;
dgvObj.ColumnHeadersDefaultCellStyle.Alignment
= DataGridViewContentAlignment.MiddleCenter;
dgvObj.ColumnHeadersDefaultCellStyle.BackColor
= HeaderBgColor;
dgvObj.EnableHeadersVisualStyles
= false ;
}

 

        写的很简单,希望对大家多提意见,‘板砖’也悦收,——“您的支持,是我写下去的动力!”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑马晓程序

为梦想而赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值