【发布时间】:2012-05-18 11:21:19
【问题描述】:
我们使用 CellFormatting 事件对应用程序中各种网格中的单元格进行颜色编码。
我们有一些通用代码可以处理导出到 Excel(和打印),但它以黑白方式执行。现在我们要更改它并从网格中获取颜色。
这个question & answer 有帮助(并且有效)...除了超出单个屏幕的较大网格存在问题。尚未在屏幕上显示的网格部分(逻辑上)永远不会触发它们的 CellFormatting 代码,因此它们的底层颜色永远不会被设置。因此,在 Excel 中,颜色编码在页面的一半处消失。
似乎有三种解决方案:
1) 告诉用户他必须在导出到 Excel 之前滚动到网格的所有部分。 哈!不是一个严肃的解决方案
2) 在导出到 Excel 之前,以编程方式滚动到网格的所有部分。 仅比 (1) 稍微不那么可怕
3) 在我们的导出到 Excel 代码中,在顶部触发一些东西,告诉 DataGridView 绘制/格式化其整个区域,例如
MyDataGridView.FormatAllCells()
有这样的东西吗???
哦,还有第四个选项,但这将涉及大量现有代码:
4) 停止使用 CellFormatting 事件,在加载时格式化单元格。问题是我们必须重新调整应用程序中的每个网格,因为 CellFormatting 是我们从 dot 开始的方式。
【问题讨论】:
-
我有一种不好的感觉,选项 3 没有解决方案。我可以建议的是选项 5:您目前拥有设置颜色和其他样式的格式化逻辑基于单元格值的属性。如果将该逻辑设为新方法,则可以从单元格格式和 Excel 代码中调用此方法。这样,您可以确保 excel 和单元格格式始终相同,但不再依赖已为您的 excel 导出调用的单元格格式。
-
另一种选择(4 的变体)是使用 CellValueChanged 进行格式化。
标签: winforms datagridview cell-formatting