上周在开发Winform 项目中,我曾遇到一个看似简单,但一直都没有解决的问题,那就是:设置winform DataGridView控件的行DefaultCellStyle,但却没有任何变化,我也曾求助于博问:http://q.cnblogs.com/q/72294/,但大家给的答案没有一个能解决这个问题,可能是问题重现不太容易,我自己也曾多次在其它项目中尝试重现这个问题,但一直都是正确的,没有出现我当前项目的问题,简直要崩溃啊!

先来看看我原有的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.SetHeader<Zwj.TEMS.Entities.AssetDetail>(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<ProcureExport>.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行)没有任何效果。当然如果你将这些代码及表格复制到其它项目中,可能不会出现这样的问题,这就是很烦人的事情。为了解决这个简单问题,搞清楚原因,今天一上班,我又开始进行测试与继续在网上找答案,终于功夫不负有心人,终于在微软的社区中发现有人也提到这样的问题,并解决了,地址是:https://social.microsoft.com/Forums/zh-CN/d928e42d-9e10-4b1a-b2ee-2694894f47af/datagridview?forum=visualcshartzhchs,这里面提到:

重新把所有绑定的数据在显示一遍,这里有一点延时,导致颜色其实没有设置到正确显示的row上。在DatabindingCompleted 时间里面,确保所有的数据 都已经绑定完成,这时候 能够确保 设置在正确的 行上面。

问题原因找到了,原来是绑定后,数据有延迟,必须确认数据绑定完成后,才能进行样式设置,基于这个原因,我修正了一下代码,将原设置Style的代码放到DataBindingComplete事件中,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.SetHeader<Zwj.TEMS.Entities.AssetDetail>(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<ProcureExport>.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) };
}

效果如下:

问题终于解决了,虽然是一个小问题,但若不明白原理及找到问题根源,小问题也会变成大问题,所以从这个问题中告诫我自己及大家:不要轻视任何一个问题,要有刨根问底的决心,每一个问题都要找到根本原因,不仅要知道如何做,还要明白为什么要这样做,这样才会成长。

关于C# Winform DataGridView 设置DefaultCellStyle无效的原因与解决方案相关推荐

  1. mint-ui Infinite scroll 重复加载、加载无效的原因及解决方案

    mint-ui Infinite scroll 重复加载.加载无效的原因及解决方案 参考文章: (1)mint-ui Infinite scroll 重复加载.加载无效的原因及解决方案 (2)http ...

  2. winform datagridview 设置标题

    1.利用datagridview的HeadText来修改标题 如图: 代码如下: View Code 1    private void InitDataGridViewHead() 2        ...

  3. Laravel 中使用Goutte + GuzzleHttp 组件设置 headers无效的原因探究以及解决方案

    我的个人博客:逐步前行STEP 使用Goutte + GuzzleHttp 爬取网页时,如下代码中的请求头设置无效: $jar = CookieJar::fromArray(["HMACCO ...

  4. C#设置DataGridView行背景色无效的问题

    C#设置DataGridView行背景色无效的问题 设置代码 for (int i = 0; i < dataGridView1.RowCount; i++){if (i % 2 == 0){d ...

  5. Winform中DataGridView设置前景色、单元格背景色、标题栏样式、禁止改变高宽、不显示空白行、清除选中样式、填充数据源、设置标题、设置单列宽度

    场景 Winform中使用DataGridView实现加载数据并显示在led大屏中. 需要设置整个DataGridView的前景色.背景色.单元格颜色.标题栏样式.禁止 改变行高.列宽.不显示新增行. ...

  6. C# winform DataGridView 常见属性

    C# winform DataGridView 常见属性 C# winform DataGridView 属性说明 ① 取得或者修改当前单元格的内容 ② 设定单元格只读 ③ 不显示最下面的新行 ④ 判 ...

  7. C# WinForm dataGridView 技巧小结

    C# WinForm dataGridView 技巧小结 1.不显示第一个空白列 RowHeaderVisible属性设置为false 2.点击cell选取整行 SelectinModel 属性Ful ...

  8. DataGridView设置单元格的提示内容ToolTip详解

    这篇文章介绍了DataGridView设置单元格提示内容ToolTip的方法,文中通过示例代码介绍的非常详细.对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 ToolTip属性用来设置 ...

  9. edittext 监听无效_Android中EditText 设置 imeOptions 无效问题的解决方法

    有时候我们需要在EditText  输出完之后 需要在键盘出现 右下角变成"Go"或"前往 搜索时:通常我们需要设置Android:imeOptions属性.Androi ...

最新文章

  1. 100%抄袭!ICLR 2022投稿竟公然剽窃两篇顶会,程序主席放「实锤」严词拒稿
  2. html圆角兼容jq,IE兼容css3圆角的htc解决方法
  3. 转 -----那些年总也记不牢的IO
  4. 【剑指offer】二叉树的深度_solution2
  5. 一个关于数学归纳法的悖论问题-续
  6. 主成分分析碎石图_ISLR读书笔记十九:主成分分析(PCA)
  7. Tooltip工具提示控件的使用
  8. Chrome 浏览器关闭了360主页防护后每次打开仍然是360导航问题排查与处理方法,不卸载360流氓软件解决chrome浏览器主页锁定问题
  9. 获取Excel合并单元格的值
  10. mathtype打出花体小写字母
  11. Mysql之分组查询
  12. 虚拟主机.htaccess伪静态(URL重写)建立多站点
  13. 杭电ACM 2094 产生冠军——C语言)
  14. Koa2仿知乎服务端项目:Webpack配置
  15. 计算机动画 vr技术应用,三维动画与VR交互和虚拟现实性技术的结合
  16. Android Google Map实例 - 在地图和卫星图之间切换(Android mapview)
  17. spring xsd 加载问题
  18. 最新代码大全《让你成为空间明星》
  19. 鱼c笔记——Python字典(二)
  20. 大数据技术与应用专业

热门文章

  1. OpenCV腐蚀和膨胀Eroding and Dilating
  2. Qt Creator造型Modeling
  3. Qt Creator添加3D视图
  4. 08_添加图例、添加标题(Adding a Title)
  5. 05_数据的特征处理,归一化,标准化、缺失值处理,以及案例,使用场景,处理办法等
  6. 6种CSS控制元素上下居中效果
  7. 创建一个存储过程,返回指定员工的姓名和薪水
  8. Mysql数据唯一约束与唯一索引案例总结及踩坑记(含NULL值与唯一约束唯一索引的搭配使用)
  9. 窗口分析函数_4_计算累加值
  10. python函数调用时的实参和形参之间传递_python 函数(实参与形参、传递参数)...