Windows Forms:DataGridView在排序后背景颜色问题

7

我有一个 Windows Forms datagridview,其中行的背景颜色不同。

问题是,在排序(单击行标题)后,背景颜色会消失,所有行都会变成白色(默认颜色)。这个问题的原因是什么?


是否正在处理排序事件? - hawbsl
你正在使用哪个版本的Visual Studio? - Peter Mortensen
2个回答

11
根据这篇于2005年6月提交给微软的错误报告,在Visual Studio 2005中,数据绑定网格控件的此种行为是有意设计的:
谢谢您的错误报告。您注意到的行为是有意设计的。 对数据绑定的网格进行排序会导致所有行都被重新创建(称为ListChangedType.Reset)。这会导致您的格式丢失。您需要使用DataBindingComplete事件应用样式,并检查ListChangedType.Reset以了解何时应用样式。或者,您可以使用CellFormatting事件。理想情况下,所有格式都可以在CellFormatting中完成,因为它是动态应用的。

7
使用Sorted事件可以恢复您DataGridView的背景颜色。
private void datagridview_Sorted(object sender, EventArgs e)
{
    //you can restore backcolor of datagridview in this function.
   //example given below
    foreach (DataGridViewRow r in datagridview.Rows)
        r.DefaultCellStyle.BackColor = Color.FromArgb(220, 0, 0);            
}

我会按照这个方案进行,但在排序之前保留编辑后的颜色,然后在排序事件中重新应用。这需要一些额外的工作,但我们确实不应该这样做。 - n00dles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接