Datagridview单元格颜色更改不起作用

时间:2010-07-08 15:16:53

标签: c# datagridview

我有一个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; } } }

3 个答案:

答案 0 :(得分:3)

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

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

MSDN forums post with the Solution

答案 1 :(得分:1)

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

上面的MSDN链接有一个您要尝试的示例。

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

答案 2 :(得分:0)

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

必须更改整行的bakColor。   除了具有 Style.BackColor 设置的单元格外。

您可以在句子中设置breakPoint以验证它。