Как я могу получить событие 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
) это стоит найти в будущем.
Я надеюсь, что это решит вашу проблему! Хорошего дня!