pintar el rectángulo en el encabezado de la columna

Estoy pintando un rectángulo en los encabezados de columna en datagridview, pero al desplazarse hacia la derecha, desaparece como en la imagen (scroll.png)

aqui esta mi codigo

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);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta