在C#中更改DataGridViewRows的foreColor和BackColor

时间:2017-03-09 20:58:46

标签: c# datagridview

我想在我的Dtgrdview中更改forecolor和backcolor行,其中iRaining的列!= 0, 通过这段代码:

foreach(DataGridViewRow DG in dtgrdUCBuyInvoices.Rows)
            if((Int64)DG.Cells["iRemaining"].Value != 0)
            {
                DG.DefaultCellStyle.BackColor = Color.Red;
                DG.DefaultCellStyle.ForeColor = Color.White;
            }

但它不起作用,颜色不会改变!!!

我该如何解决?

非常感谢!!

2 个答案:

答案 0 :(得分:1)

您似乎正在尝试更改DataGridView渲染之外的行颜色。

让我们尝试将您的代码添加到RowPrePaint的{​​{1}}事件中:

DataGridView

在初始化期间注册:

private void dtgrdUCBuyInvoices_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
{
  if ((Int64)dtgrdUCBuyInvoices.Rows[e.RowIndex].Cells["iRemaining"].Value != 0)
    {
      dtgrdUCBuyInvoices.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Red;
      dtgrdUCBuyInvoices.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.White;
    }
}

答案 1 :(得分:1)

我可能在这里猜测,但你如何得到和比较这些值很可能是失败的。同样在您发布的代码中,如果单元格值不为0,那么您想将整行设置为红色吗?下面是转换单元格的字符串值的代码,如果它不是零(0),它会将单元格设置为颜色和前面颜色。尝试下面的代码,看看它是否有帮助。

Int64 cellValue = 0;
foreach (DataGridViewRow DG in dtgrdUCBuyInvoices.Rows) {
  if (!DG.IsNewRow && DG.Cells["iRemaining"].Value != null) {
    Int64.TryParse(DG.Cells["iRemaining"].Value.ToString(), out cellValue);
    if (cellValue != 0) {
      DG.Cells["iRemaining"].Style.BackColor = Color.Red;
      DG.Cells["iRemaining"].Style.ForeColor = Color.White;
    }
  }
}