我将DataGridView
绑定到(付款'对象列表)集合,我正在使用RowsAdded
事件根据付款状态更改行的背景颜色。
我正在使用(row.DefaultCellStyle.BackColor
)来改变背面颜色,但是如果我改变了第一行的颜色,那么第二行的颜色也会改变,即使我没有改变它的背面颜色。
并且我不想将其背面颜色更改为(白色),因为有些列具有自己的颜色。
private void dgvPayment_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
DataGridViewRow row = dgvPayment.Rows[e.RowIndex];
Payment lPayment = row.DataBoundItem as Payment;
if (lPayment != null)
if (lPayment.IsLocked)
{
row.DefaultCellStyle.BackColor = Color.LightPink;
row.ReadOnly = true;
}
}
如何解决这个问题?
您可以下载here的源代码。
答案 0 :(得分:1)
行添加事件的行为有些不可预测 - 对于这种网格操作,通常最好使用其他事件。
在这种情况下,请使用CellFormatting
事件:
void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridViewRow row = dgvPayment.Rows[e.RowIndex];
Payment lPayment = row.DataBoundItem as Payment;
if (lPayment != null && lPayment.IsLocked)
{
row.DefaultCellStyle.BackColor = Color.LightPink;
}
else
{
row.DefaultCellStyle.BackColor = Color.White;
}
}
答案 1 :(得分:1)
问题是当我把backColor变成白色时,整行会变成白色,我不想要这个,因为有一个列有自己的backColor。
如上所述here(datagridview-defaultcellstyle-rows-and-columns-priority):
它可能是DataGridViews内部的东西,其中行样式 显式地覆盖列样式或因为行样式 应用于列样式之上。
除了为第一行和第一行设置默认样式外 列,尝试直接设置第一个单元格的样式,这将是 覆盖任何默认值,无论是行还是列。
所以我解决了这个问题;
private void dgvPayment_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
for (int index = e.RowIndex; index <= e.RowIndex + e.RowCount - 1; index++)
{
DataGridViewRow row = dgvPayment.Rows[index];
Payment lPayment = row.DataBoundItem as Payment;
if (lPayment != null && lPayment.IsLocked)
{
row.DefaultCellStyle.BackColor = Color.Pink;
row.ReadOnly = true;
}
else
{
row.DefaultCellStyle = null;
row.ReadOnly = false;
}
}
}