我想在我的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;
}
但它不起作用,颜色不会改变!!!
我该如何解决?
非常感谢!!
答案 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;
}
}
}