如何在WinForms中有条件地更改datagridview的单元格格式?

时间:2014-02-12 13:28:44

标签: c# winforms

在我的表单加载事件中,我有一个添加到BindingSource的对象列表。我在load事件中调用的最后一行代码是:

dataGridView1.DataSource = bindingSource;

我尝试使用dataGridView1_CellPainting事件以及dataGridView1_CellFormatting事件更改单元格格式。两个事件都没有被调用。

由于

2 个答案:

答案 0 :(得分:2)

要从网格接收CellPainting事件,您必须订阅它。这可以在表单设计器中完成,也可以在代码中完成。有关详细信息,请参阅this link

答案 1 :(得分:2)

值得注意的是,您可以通过使用DefaultCellStyle属性来处理更改颜色和其他单元格样式功能。这可以应用于网格级别,行级别,列级别,一直到单个单元格级别。这是一个很好的图像,展示了如何继承样式:

CellStyle inheritance

如果可能,最好在层次结构的最高级别应用样式,并将其继承到单元格。这与您希望避免使用CellPaintingCellFormatting事件为单元格着色的原因相同;您正在处理每个单元格的事件,并且可以更有效地完成。您可能不会注意到小数据集或简单网格,但如果您需要扩展,它会降低您的速度。当您需要应用自定义格式或单元格绘制方面时,请使用这些事件,但是为了着色,您可以更高效。有关详细信息,请参阅Best Practices Cell Styling

根据给出的信息,您似乎正在尝试将单元格颜色应用于网格发布数据绑定的自动生成列。我建议您使用上述技术在DataBindingComplete事件中设置DataGrid的样式。您可以使用最新的绑定数据应用条件样式,并避免CellPainting中的过度处理。