2014-10-08 2 views
1

У меня такая ситуация с DataGridView в Winforms. я хочу для того чтобы достигнуть что-то вроде этого, с некоторым расстоянием между рядамиЯчейка для сотовой связи или краска часть ячейки

Grid with image and text

Изображение и решения N39 фактически на 2 колонки, без горизонтального края и без столбца линии сетки, чтобы они выглядели, как они принадлежат в целом. Чтобы добиться разделения между строками, я переопределяю CellPainting и перерисовываю всю сетку, используя Graphics.FillRectangle (с высотой меньше высоты ячейки), Graphics.DrawLine - Graphics.DrawString и Graphics.DrawText для рисования содержимого ячейки.

Во втором случае у меня есть флажок в качестве одного из столбцов.

Grid with checkbox column

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

Однако, если я хочу переопределить CellPainting, чтобы создать такое разделение, как описано выше, мне может понадобиться перекрасить весь контент, но я не знаю о методе рисования и обработки флажка. Итак, я подумал, если возможно, я просто нарисую прямоугольник с цветом фона (светло-серый) на ячейки и оставьте содержимое для Winform для обработки.

Мои вопросы:

  1. Как я могу перекрасить только часть клетки, например, нарисовать замкнутый прямоугольник и оставить содержимое оставшейся ячейки для Winforms?

  2. Если у нас нет выбора, кроме как перерисовать всю ячейку, как вы перекрашиваете и обрабатываете столбцы флажка?

  3. Любое другое предложение приветствуется.

Большое спасибо.

Лучший.

ответ

1

Есть два удобных методов в богатом наборе параметров в ubiquous e на CellPainting мероприятия:

e.PaintContent и e.PaintBackground делать всю работу, если вы хотите изменить только часть внешности:

if (e.ColumnIndex == yourColumnIndex) 
{ 
    // do your special stuff.. 
    e.Graphics.FillRectangle(Brushes.Wheat, e.CellBounds); 
    // .. 
    // now get the regular content drawn by the system 
    e.PaintContent(e.CellBounds); 
    // and quit 
    e.Handled = true; 
} 
+0

Работает как очарование. Также поняли, что я не могу использовать общую проверку e.Value! = Null для столбца флажка, иначе флажок не появится. Спасибо, TaW! – Kenny

Смежные вопросы