使用DataGridView恢复为交替行颜色

时间:2015-02-10 02:34:12

标签: c# winforms datagridview

我已经通过Visual Studio IDE设置了AlternatingRowStyle BackColor,我的问题是,如果我根据某些条件修改单元格的BackColor,我如何将其设置为正确的行颜色(即白色或交替的行)没有求助于RowIndex的模数。

我尝试了以下但取得了明显的成功,但如果这是解决方案,我不是100%:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        double d = Convert.ToDouble(e.Value);

        if (d > 5)
        {
            e.CellStyle.BackColor = Color.Red;
        }
        else
        {
            e.CellStyle.ApplyStyle(dataGridView1.RowsDefaultCellStyle);
        }
    }

2 个答案:

答案 0 :(得分:0)

您应该使用DataGridViewCellPainting,修改CellStyle

中的DataGridViewCellPaintingEventArgs

似乎e.CellStyle实际上并不影响cell.CellStyle,这意味着如果条件不满足则不需要重置单元格

答案 1 :(得分:0)

由于您根据其值决定了backColor个细胞,我建议您使用CellValueChanged个事件。

示例

我假设奇数行为黄色,偶数行默认为白色,以防任何单元符合条件(值> 5)将以红色显示。

private void dataGridView1_CellValueChanged(object sender,DataGridViewCellEventArgs e)
{
    int col = e.ColumnIndex;
    int row = e.RowIndex;
    double d = Convert.ToDouble(dataGridView1[col, row].Value);

    switch (row%2)
    {
        case 0:
           if (d > 5)
               dataGridView1[col, row].Style.BackColor = Color.Red;
           else
               dataGridView1[col, row].Style.BackColor = Color.White;
        break;
        case 1:
           if (d > 5)
               dataGridView1[col, row].Style.BackColor = Color.Red;
           else
               dataGridView1[col, row].Style.BackColor = Color.Yellow;
        break;
   }
}