我有一个加载DataGridView
. 我创建了一个CellPainting
事件来根据单元格值对行进行着色。我之所以这样做是CellPainting
因为遍历 中的行Datagridview
并绘制它们花费的时间太长,所以这更有效。
问题
- 该
CellPainting
事件不适用于表单加载。这意味着所有行都被隐藏,直到我滚动或单击它们,然后它们会根据单元格值正确绘制。 - 我注意到的另一件事是缺少列标题。另一个问题是当我
DataGridView
使用滚动条向下滚动 Rows 时,CellPainting
再次调用了,我必须等待几秒钟,因为它会重新绘制行颜色。这很烦人,尤其是当我有数千行时,每次滚动都会导致延迟。
所有这些问题都消失了,DatagridView
当我删除方法时,列标题和行都出现了CellPainting
,所以问题显然存在。以下是我的片段,感谢您的帮助。
private void timeLineDataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
//only bold and/or color the rows that are false
if ((Boolean)timeLineDataGridView.Rows[e.RowIndex].Cells[12].Value == false)
{
//get timestamp and go ahead and bold it
DateTime eventTime = DateTime.Parse(timeLineDataGridView.Rows[e.RowIndex].Cells["TIMESTAMP"].Value.ToString());
timeLineDataGridView.Rows[e.RowIndex].DefaultCellStyle.Font = this.boldFont;
if (eventTime < this.delay_warn_time3)
{
timeLineDataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
}
else if (eventTime < this.delay_warn_time2)
{
timeLineDataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Orange;
}
else if (eventTime < this.delay_warn_time1)
{
timeLineDataGridView.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
}
}
}