DataGridView CellPainting не полностью работает на прокрутке

Первый пост, но долгое время браузер :)

Итак, вот моя проблема: в основном у меня есть сетевое представление данных, которое я использую для взаимодействия с пользователем. Во всех строках есть & quot; информация & quot; кнопка, которая создаст иллюзию, что она добавляет еще одну строку под ней со всеми объединенными ячейками (одна длинная ячейка по всей строке) и рисует текст и изображения, описывающие строку над ней, в «информационную ячейку».

Это прекрасно работает, за исключением случаев, когда представление сетки данных прокручивается по вертикали, тогда кажется, что рисование не вызывается, и сетка выглядит испорченной. Есть идеи?

Вот основная схема кода:

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
            ....
        }
    }
}

Ответы на вопрос(1)

Решение Вопроса

Догадаться. Необходимо создать двойной буфер для просмотра данных, выполнив следующие действия:

class CustomDataGridView : DataGridView {

public CustomDataGridView() {
    base.DoubleBuffered = true;
}
}

Я также поместил код в событие RowPostPainting и изменил оператор if на:

if (e.RowIndex == i) { .... }

Надеюсь, это поможет кому-то еще.

Ваш ответ на вопрос