【问题标题】:Datagridview cell color change doesnt workDatagridview 单元格颜色更改不起作用
【发布时间】:2010-07-08 15:16:53
【问题描述】:

我有一个 Datagridview 绑定到一个数据表,该数据表保存数据库中的数据

我做了一个函数来检查日期是否在正确的时间范围内

如果正确,则什么也不会发生。

否则必须将行/单元格的颜色更改为红色

我尝试了很多东西,但没有任何效果

这是我创建的方法:


        private void CheckFactTermijn()
        {
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                DateTime FactuurDatum = Convert.ToDateTime(dataGridView1.Rows[i].Cells[2].Value.ToString());
                int termijn = Convert.ToInt32(dataGridView1.Rows[i].Cells[7].Value.ToString());
                DateTime finalDate = FactuurDatum.AddDays((double)termijn);

            if (finalDate > DateTime.Now)
            {
            }
            else
            {
                    dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red;
            }
        }
    }

【问题讨论】:

    标签: c# datagridview


    【解决方案1】:

    我相信解决方案在于设置颜色的时间,而不在于设置颜色的方法。已经提出了几种不同的事件,其中一些确实有效。使用单元格格式化、数据绑定完成甚至绘制事件的问题之一是它们会被多次触发。从我收集到的信息来看,datagridview 控件存在一个问题,即在显示表单之前,您无法更改任何单元格的颜色。因此,在调用 Shown() 之前运行的方法或触发的事件不会改变颜色。定位为问题解决方案的事件通常有效,但由于它们被多次调用,可能不是最有效的答案。

    可能最简单的问题解决方案是将您的代码用于填充/着色您的网格在表单的 Shown() 方法中,而不是在构造函数中。下面是 msdn 论坛中向我提示解决方案的帖子的链接,它被标记为页面下方 3/4 处的答案。

    MSDN forums post with the Solution

    【讨论】:

      【解决方案2】:

      我不确定您的代码何时运行,但请尝试在 DGV 的 DataGridView.CellFormatting Event 中设置 DataGridView 的 DefaultCellStyle 属性。

      上面的 MSDN 链接有一个您正在尝试做的示例。

      请注意,您不会遍历 DGV 中的每一行(就像您的方法一样);您将改为使用 DataGridViewCellFormattingEventArgs ColumnIndex 属性来检查触发事件的列。

      【讨论】:

      • 如果我使用那个事件,我还能使用我创建的方法吗?
      • THX DUDE...我使用了该事件并将方法放入其中,并且效果很好
      【解决方案3】:

      dataGridView1.Rows[i].DefaultCellStyle.BackColor = Color.Red;

      必须更改整行的 bakColor。 除了设置了自己的 Style.BackColor 的单元格。

      你可以在句子中设置一个断点来验证它。

      【讨论】:

      • 它可以到达那里并读取该行但它什么也不做
      猜你喜欢
      • 1970-01-01
      • 2013-04-12
      • 2016-05-27
      • 2012-04-25
      • 2013-10-23
      • 1970-01-01
      • 2023-04-06
      • 2014-08-24
      相关资源
      最近更新 更多