DataGridView CellPainting не полностью работает на прокрутке - PullRequest
2 голосов
/ 17 июля 2009

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

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

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

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

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 Ответ

2 голосов
/ 18 июля 2009

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

class CustomDataGridView : DataGridView {

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...