gpt4 book ai didi

winforms - 有没有办法强制 DataGridView 为所有单元格触发其 CellFormatting 事件?

转载 作者:行者123 更新时间:2023-12-02 04:08:24 28 4
gpt4 key购买 nike

我们使用 CellFormatting 事件对应用程序中各个网格中的单元格进行颜色编码。

我们有一些通用代码可以处理导出到 Excel(和打印),但它是黑白的。现在我们要更改此设置并从网格中选取颜色。

这个question & answer已经有所帮助(并且它有效)......除了超出单个屏幕的较大网格存在问题。尚未在屏幕上显示的网格部分(逻辑上)永远不会触发其 CellFormatting 代码,因此它们的底层颜色永远不会被设置。因此,在 Excel 中,颜色编码在页面的中间消失

似乎有三种解决方案:

1) 告诉用户在导出到 Excel 之前必须滚动到网格的所有部分。 哈!这不是一个严肃的解决方案

2) 在导出到 Excel 之前,以编程方式滚动到网格的所有部分。 仅比(1)稍微不那么可怕

3) 在导出到 Excel 代码中,在顶部触发一些内容,告诉 DataGridView 绘制/格式化其整个区域,例如

  MyDataGridView.FormatAllCells()

有没有类似的东西???

哦,还有第四种选择,但这将涉及大量现有代码:

4) 停止使用 CellFormatting 事件,在加载时格式化单元格。问题是我们必须重新调整应用程序中的每个网格,因为 CellFormatting 是我们自年点以来所做的方式。

最佳答案

正如其他答案中所述,访问 DataGridViewCell.FormattedValue 确实是强制为特定单元格(重新)调用 CellFormatting 事件的简单方法。然而,就我而言,此属性还导致了涉及自动调整列大小的不良副作用。在寻找可行的解决方案很长时间后,我终于遇到了以下完美工作的神奇方法:DataGridView.Invalidate()DataGridView.InvalidateColumn()DataGridView.InvalidateRow()DataGridView.InvalidateCell()

这 4 个方法强制仅针对指定范围(单元格、列、行或整个表格)重新调用 CellFormatting 事件,并且不会导致任何令人讨厌的自动调整大小工件。

关于winforms - 有没有办法强制 DataGridView 为所有单元格触发其 CellFormatting 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10651702/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com