现在,我正在使用以下内容为datagridview行上色:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
    if ((row.Index % 2) == 0)
    {
        row.DefaultCellStyle.BackColor = Color.NavajoWhite;
    }
}

这对于第一次加载数据很好。但是,我也使用第三方库来过滤列,就像excel一样(http://www.codeproject.com/Articles/33786/DataGridView-Filter-Popup)。它工作得很好,但是问题是这段代码在应用的每个筛选上重新绘制datagridview(纯白色)。例如,如果我愿意,我可以捕捉在每次筛选之后重新绘制行所必需的事件
dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)

但是如果我有大矩阵(成百上千行),那是非常低效的。
问题是是否有一种方法可以使行背景色固定,尽管通过过滤完成了重新绘制。在我看来,这可能是一个很长的机会,所以任何建议,以解决这个问题或使它更快和更有效,将不胜感激。

最佳答案

对每个单元格尝试仅处理CellPainting事件

private void dataGridView1_CellPainting(object sender,
System.Windows.Forms.DataGridViewCellPaintingEventArgs e)
{
     if ((e.RowIndex % 2) == 0)
         e.CellStyle.BackColor = Color.NavajoWhite;
}

10-04 12:08