随笔 - 79  文章 - 0  评论 - 763  阅读 - 77万 

        在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>
protectedvoid 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>
protectedvoid SetDgv_AlternatingRowColor(DataGridView dgv, Color deRowColor, Color altRowColor)
{
dgv.RowsDefaultCellStyle.BackColor
= deRowColor;
dgv.AlternatingRowsDefaultCellStyle.BackColor
= altRowColor;
}

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

///<summary>
/// 设置 DataGridView 特殊样式 [无边框 内容居中 设置表头背景色]
///</summary>
protectedvoid 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;
}
复制代码

 

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

posted on   know-more  阅读(1521)  评论(4编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

湖北诚万兴科技-专业微信小程序开发!

微信小程序开发一物一码红包系统开发iPhone序列号查询
点击右上角即可分享
微信分享提示