2013-07-16 4 views
1

Я картина прямоугольник на заголовки столбцов в DataGridView, но на прокрутку, чтобы исправить это исчезает, как на картинке (scroll.png) enter image description here enter image description hereкраски прямоугольник на заголовке столбца

вот мой код

Rectangle r1; 
void dataGridView1_Paint(object sender, PaintEventArgs e) 
{ 
    string[] monthes = { "APPLE", "MANGO", "CHERRY", "GRAPES", "PINEAPPLE" }; 
    for (int j = 0; j < this.dataGridView1.ColumnCount;) 
    { 
     r1 = this.dataGridView1.GetCellDisplayRectangle(j, -1, true); 
     int w2 = this.dataGridView1.GetCellDisplayRectangle(j + 1, -1, true).Width; 
     r1.X += -2; 
     r1.Y += 30; 
     r1.Width = r1.Width + w2 - 1; 
     r1.Height = r1.Height/3 - 2; 
     e.Graphics.FillRectangle(new SolidBrush(this.dataGridView1.ColumnHeadersDefaultCellStyle.BackColor), r1); 
     StringFormat format = new StringFormat(); 
     format.Alignment = StringAlignment.Center; 
     format.LineAlignment = StringAlignment.Center; 
     e.Graphics.DrawRectangle(new Pen(Color.Black), r1); 
     e.Graphics.DrawString(monthes[j/2], this.dataGridView1.ColumnHeadersDefaultCellStyle.Font, new SolidBrush(this.dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor), r1, format); 

     j += 2; 
    } 
} 

void dataGridView1_Scroll(object sender, ScrollEventArgs e) 
{ 
    Rectangle rtHeader = this.dataGridView1.DisplayRectangle; 
    rtHeader.Y += 0; 
    rtHeader.Height = this.dataGridView1.ColumnHeadersHeight; 
    this.dataGridView1.Invalidate(rtHeader); 
} 
+0

Я думаю, что использование обработчика событий «CellPainting» было бы более подходящим, чем «Paint», заголовки столбцов имеют значение «RowIndex» -1. –

ответ

0

Я проверил код и линию ответственного за поведение вы описываете this.dataGridView1.Invalidate(rtHeader);

Таким образом, у вас есть два решения:

  • Удаление вышеупомянутой строки.
  • Или положить реперты в ячейки (в первом ряду, было бы хорошо), а не в заголовках.
Смежные вопросы