2010-07-08 21 views
3

我从一个数据库绑定到数据表至极保持数据的DataGridViewDataGridView的单元格颜色变化不工作

我做了检查,如果日期是一个正确的时间范围内

的功能,如果它的正确什么发生。

否则有行/单元格的颜色变为红色

我尝试了很多东西,但没有任何工程

这里是我创建的方法:


     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; } } }

回答

1

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

上面的MSDN链接有一个你想要做的例子。

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

+0

如果我使用该事件,我仍然可以使用我创建的方法吗? – Willem 2010-07-08 20:37:09

+0

THX DUDE ... 我使用了该事件并将其放入其中,并且它完美地运行了 – Willem 2010-07-09 09:44:29

0

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

必须更改整行的bakColor。 除具有自己的Style.BackColor集的单元格外。

您可以在句子处设置breakPoint以验证它是否有效。

+0

它到达了ALRIGHT并且它读取了该行,但它没有执行任何操作 – Willem 2010-07-08 20:43:33

3

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

问题的最简单的解决办法可能是将您的代码填充到您的表单的Shown()方法中,而不是构造函数中。下面是msdn论坛中发布的一篇文章的链接,它将我引入解决方案,它被标记为答案约3/4。

MSDN forums post with the Solution

相关问题