
关于C# Winform DataGridView 设置DefaultCellStyle无效的原因与解决方案
发布日期:2021-05-09 09:35:01
浏览次数:17
分类:博客文章
本文共 3635 字,大约阅读时间需要 12 分钟。
上周在开发Winform 项目中,我曾遇到一个看似简单,但一直都没有解决的问题,那就是:设置winform DataGridView控件的行DefaultCellStyle,但却没有任何变化,我也曾求助于博问:,但大家给的答案没有一个能解决这个问题,可能是问题重现不太容易,我自己也曾多次在其它项目中尝试重现这个问题,但一直都是正确的,没有出现我当前项目的问题,简直要崩溃啊!
先来看看我原有的代码:
private void Form1_Load(object sender, EventArgs e) { dataGridView1.SetHeader(t => t.AssetSingleNo, t => t.BaseInfo.Name, t => t.BaseInfo.Category.CategoryName, t => t.Price, t => t.ProcureImport.Date, t => t.State.State); LoadData(); } private void LoadData() { var resultList = QueryBusiness .GetList(t =>true,//这里演示就直接忽略条件 t => new { t.AssetSingleNo, t.AssetSingleInfo.BaseInfo.Name, t.AssetSingleInfo.BaseInfo.Category.CategoryName, t.AssetSingleInfo.Price, t.AssetSingleInfo.ProcureImport.Date, t.AssetSingleInfo.State.State },t =>t.AssetSingleNo,1,10); dataGridView1.DataSource = resultList; int entityInListIndex = 1; dataGridView1.Rows[entityInListIndex].DefaultCellStyle = new DataGridViewCellStyle() { ForeColor = Color.Blue, Font = new Font("Arial", 11F, FontStyle.Bold) }; }
最终呈现的效果如下:
从上面的表格中可以看出,第2行(索引为1,实际为第2行)没有任何效果。当然如果你将这些代码及表格复制到其它项目中,可能不会出现这样的问题,这就是很烦人的事情。为了解决这个简单问题,搞清楚原因,今天一上班,我又开始进行测试与继续在网上找答案,终于功夫不负有心人,终于在微软的社区中发现有人也提到这样的问题,并解决了,地址是:,这里面提到:
重新把所有绑定的数据在显示一遍,这里有一点延时,导致颜色其实没有设置到正确显示的row上。在DatabindingCompleted 时间里面,确保所有的数据 都已经绑定完成,这时候 能够确保 设置在正确的 行上面。
问题原因找到了,原来是绑定后,数据有延迟,必须确认数据绑定完成后,才能进行样式设置,基于这个原因,我修正了一下代码,将原设置Style的代码放到DataBindingComplete事件中,如下:
private void Form1_Load(object sender, EventArgs e) { dataGridView1.SetHeader(t => t.AssetSingleNo, t => t.BaseInfo.Name, t => t.BaseInfo.Category.CategoryName, t => t.Price, t => t.ProcureImport.Date, t => t.State.State); dataGridView1.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dataGridView1_DataBindingComplete); LoadData(); } private void LoadData() { var resultList = QueryBusiness .GetList(t =>true,//这里演示就直接忽略条件 t => new { t.AssetSingleNo, t.AssetSingleInfo.BaseInfo.Name, t.AssetSingleInfo.BaseInfo.Category.CategoryName, t.AssetSingleInfo.Price, t.AssetSingleInfo.ProcureImport.Date, t.AssetSingleInfo.State.State },t =>t.AssetSingleNo,1,10); dataGridView1.DataSource = resultList; } private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) { int entityInListIndex = 1; dataGridView1.Rows[entityInListIndex].DefaultCellStyle = new DataGridViewCellStyle() { ForeColor = Color.Blue, Font = new Font("Arial", 11F, FontStyle.Bold) }; }
效果如下:
问题终于解决了,虽然是一个小问题,但若不明白原理及找到问题根源,小问题也会变成大问题,所以从这个问题中告诫我自己及大家:不要轻视任何一个问题,要有刨根问底的决心,每一个问题都要找到根本原因,不仅要知道如何做,还要明白为什么要这样做,这样才会成长。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月01日 06时03分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
git拉取远程指定分支代码
2019-03-07
C语言--C语言总结大纲
2019-03-07
轻松理解前后端分离(通俗易懂)
2019-03-07
JavaFX官方文档
2019-03-07
ORA-12154: TNS: 无法解析指定的连接标识符
2019-03-07
Spring学习总结(十二):Spring中的事务管理
2019-03-07
G7相关
2019-03-07
Linux 激活网卡ifconfig eth1 up 和 ifup eth1 之间的差别
2019-03-07
In App Purchase Verification using PHP
2019-03-07
Mapper.xml中新增数据并返回主键ID(MYSQL)
2019-03-07
shell编程===》进程锁
2019-03-07
教你如何一招破解简单的joy.dex的卡密系统(Auto.js)
2019-03-07
Linux小操作LVM
2019-03-07
Split返回数组元素含有空字符串移除
2019-03-07
解决VS中C语言运行scanf错误
2021-05-10
Java注解
2021-05-10
idea上的程序报错-> 错误: 找不到或无法加载主类
2019-03-07
java刷题--49字母异位词分组
2019-03-07
《web安全入门》(四)前端开发基础Javascript
2019-03-07