1

我将 a 绑定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;
                }
        }

如何解决这个问题?

你可以在这里下载源代码。

4

2 回答 2

1

rows added 事件的行为有些不可预测 - 对于这种网格操作,通常最好使用其他事件。

在这种情况下,使用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;
    }
}
于 2012-11-23T14:57:39.873 回答
1

问题是当我将背景颜色设置为白色时,整行都会变成白色,我不想要这个,因为有一列有自己的背景颜色。

如此处所述(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;
                }


            }
        }
于 2012-11-23T15:50:09.483 回答