我有一个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;
}
}
}
答案 0 :(得分:3)
我相信解决方案在于您设置颜色时,而不是您设置颜色的方法。已经提出了几个不同的事件,其中一些确实有效。使用cellformatting,databindingcomplete或甚至绘制事件的问题之一是它们被多次触发。从我收集的内容来看,datagridview控件存在一个问题,即在表单显示之后,您无法更改任何单元格的颜色。因此,在调用Shown()之前运行的方法或触发的事件不会改变颜色。作为问题解决方案的事件通常有效,但由于它们被多次调用,可能不是最有效的答案。
问题的最简单的解决方案可能是将代码填入/填充表单的Shown()方法中的网格而不是构造函数。下面是msdn论坛中一篇帖子的链接,该帖子向我提供了解决方案,它被标记为关于页面下方3/4的答案。
答案 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以验证它。