¿Hay una manera de forzar a un DataGridView a disparar su evento CellFormatting para todas las celdas?

Usamos el evento CellFormatting para codificar con color las celdas en varias cuadrículas en toda nuestra aplicación.

Tenemos algunos códigos genéricos que manejan exportar a Excel (e imprimir) pero lo hace en blanco y negro. Ahora queremos cambiar esto y recoger el color de las cuadrículas.

Estapregunta respuesta ha ayudado (y funciona) ... excepto que hay un problema con grillas más grandes que se extienden más allá de una sola pantalla. Las partes de la cuadrícula que aún no se han mostrado en la pantalla nunca logran que se active su código de formato de celda (lógicamente), por lo que su color subyacente nunca se establece. Como resultado, en Excel, el código de colorse desvanece A medio camino de la página.

Parece que hay tres soluciones:

1) Dígale al usuario que debe desplazarse a todas las partes de la cuadrícula antes de hacer una Exportación a Excel.¡Decir ah! No es una solución seria

2) Desplácese programáticamente a todas las partes de la cuadrícula antes de hacer una exportación a Excel.Sólo un poco menos horrible que (1)

3) En nuestro código de Exportar a Excel, dispare algo en la parte superior que le indique a DataGridView que pinte / formatee toda su área, por ejemplo.

  MyDataGridView.FormatAllCells()

¿Hay algo que haga algo como esto?

Ah, y hay una cuarta opción, pero esto implicará tocar una gran cantidad de código existente:

4) Deje de usar el evento CellFormatting, formatee las celdas en el momento de la carga. El problema con esto es que tendríamos que actualizar cada cuadrícula en nuestra aplicación, ya que CellFormatting es la forma en que lo hemos hecho desde hace un año.

Respuestas a la pregunta(5)

Su respuesta a la pregunta