关于Datagridview的paint事件的无休止

关于Datagridview的paint事件的没完没了
我想在datagridview的表格的第三行后画上一条蓝线,好将内容分开。可是当拖动滚动条后,会不断的在当前屏幕的第三行添加蓝线,这个问题怎么解决呢?


private void dgv_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
dynamic rowOffset = 0;
int count = 0;

foreach (DataGridViewRow row in dgv.Rows) {
rowOffset += row.Height;
if (count == 3) {
e.Graphics.DrawLine(new Pen(Color.SkyBlue, 3), 0, rowOffset + 2, dgv.Width, rowOffset + 2);
}
count = count + 1;
}
}

private void dgv_Scroll(object sender, System.Windows.Forms.ScrollEventArgs e)
{
dgv.Invalidate;
}


------解决思路----------------------
最好在RowPostPaint 里面做。这样一来,一容易定位目标行,二是不需要在dgv_Scroll的时候刷新。


public Form1()
{
    InitializeComponent();
    this.dataGridView1.RowPostPaint += dataGridView1_RowPostPaint;
}

void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    if (e.RowIndex != 2) return;

    DataGridView gridView = sender as DataGridView;
    int bottom = e.RowBounds.Bottom - 1;
    int left = gridView.RowHeadersWidth;
    int right = left + gridView.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - gridView.HorizontalScrollingOffset;

    e.Graphics.DrawLine(Pens.Blue, left, bottom, right, bottom);
}