方法一:
網上最常見的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中繪制行號:
RowPostPaint
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
try
{
//添加行號
SolidBrush v_SolidBrush = new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor);
int v_LineNo = 0;
v_LineNo = e.RowIndex + 1;
string v_Line = v_LineNo.ToString();
e.Graphics.DrawString(v_Line, e.InheritedRowStyle.Font, v_SolidBrush, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5);
}
catch (Exception ex)
{
MessageBox.Show("添加行號時發生錯誤,錯誤信息:" + ex.Message, "操作失敗");
}
}
但是這種方法在大數據量的時候性能比較差,每次滾動數據都會觸發RowPostPaint事件。
方法二:
我的做法是給每行的HeaderCell賦值。
在網上發現有人提到這種做法,但是因為最後的顯示問題而選擇了上面的方法。具體問題就是,在行號超過2位,如100、1000,在選中該行時,DataGridView的行指示符▶會把行號往右擠,導致現實不全,100的時候顯示▶ 10。
其實還是RowsHeaderWidth的大小有問題,將該列的寬度放大,行號顯示的也沒問題!
不知道他們有沒有試過,上面繪制行號的方法在大行號的情況下顯示也會有問題。
既然知道問題所在