DataGridView CellPainting no funciona completamente en el desplazamiento

Primer post, pero navegador de mucho tiempo :)

Así que aquí está mi problema: básicamente tengo una vista de datos que estoy usando para interactuar con el usuario. En todas las filas, hay un botón de "información" que dará la ilusión de que agrega otra fila debajo con todas las celdas combinadas (una celda larga en toda la fila) y dibuja el texto y las imágenes que describen la fila que está arriba. en la "celda de información".

Esto funciona muy bien, excepto cuando la vista de datos se desplaza verticalmente, luego parece que no se llama a la pintura y la cuadrícula está en mal estado buscando. ¿Algunas ideas?

Aquí hay un esquema básico del código:

private void grid_CellPainting(object sender, DataGridViewCellPaintingEventArgs e){     
    // Loop through and draw all of the open information rows
    foreach (int i in openInfoCells) {
        if (i >= grid.FirstDisplayedCell.RowIndex && 
            i <= (grid.DisplayedRowCount(true) + grid.FirstDisplayedCell.RowIndex)) {

            // Draw Rectangle
            ....

            // Draw Text or Image
            ....
        }
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta