Как я могу получить событие CellPainting моего DataGridView для работы с частично отображаемыми ячейками?

У меня есть datagridview в C# winforms 4.0. Я делаю некоторые пользовательские рисования ячеек для фона и границ. Вот мой код из события CellPainting:

 //Background color
 if (e.RowIndex / 3 % 2 == 0 && e.RowIndex > -1)
     e.CellStyle.BackColor = Color.LightGray;

 //Bottom border
 if (e.RowIndex % 3 == 2)
 {
    using (Pen p = new Pen(Brushes.Black))
    {
       p.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
       e.Graphics.DrawLine(p, new Point(0, e.CellBounds.Bottom - 1), 
                              new Point(e.CellBounds.Right, e.CellBounds.Bottom - 1) );
    }
    e.PaintContent(e.CellBounds);
 }

Вот как выглядит мое представление данных (я не могу опубликовать изображение, поэтому вот ссылка на него) http://i.imgur.com/hLR3JjV.png

Как вы можете видеть, цвет фона работает для всех моих ячеек, но границы не отображаются для ячеек, которые только частично отображаются в виде сетки данных. Например, из моего изображения - ячейка в каждом ряду в Column4

Может кто-нибудь помочь мне разобраться, что я могу сделать, чтобы частично отображаемые ячейки нарисовали нижнюю границу?

1 ответ

Решение

Он снова перезаписывается нормальным кодом рисования ячеек. Вы должны использовать e.Handled = true; чтобы этого не случилось. Это требует от вас больше работы, вам также нужно нарисовать фон. Кстати, никогда не меняйте свойства в обработчике события рисования. И рисовать слева направо, а не 0. (e.PaintBackground(e.CellBounds, true); перед using а также e.Handled = true; после drawContent) это стоит найти в будущем.

Я надеюсь, что это решит вашу проблему! Хорошего дня!

Другие вопросы по тегам