DataGridViewを利用した場合、Excelのように行ヘッダに行番号を表示させたいことがあります。
その方法について説明します。
通常、行ヘッダに値を表示するには、以下のようにします。
  DataGridView1.Rows(0).HeaderCell.Value = "A"

この方法で行番号を設定する場合には、行の削除や整列を行った場合、自動的に行番号を振り直すことができず、最初に設定した行番号がそのまま表示されてしまいます。
そのため、行番号として扱うには、削除や整列を行う都度、全行のヘッダを設定し直さなければなりません。
これではデータ件数によっては、番号の振り直しに時間がかかってしまいます。
そこで、別の方法で番号を振ることができないか確認してみたところ、以下の方法がありました。
 1.DataGridViewのCellPaintingイベントを利用する
 2.DataGridViewのRowPostPaintイベントを利用する

※ このイベントは、どちらも.NET Framework 2.0で追加されたものです。

以下、サンプル。
【CellPaintingイベント】

Private Sub DataGridView1_CellPainting( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) _
Handles DataGridView1.CellPainting

'列ヘッダを対象外しておかないと列ヘッダにも番号を表示してしまう
If e.ColumnIndex < 0 And e.RowIndex >= 0 Then
'セルを描画する
e.Paint(e.ClipBounds, DataGridViewPaintParts.All)

'行番号を描画する範囲を決定する
Dim idxRect As Rectangle = e.CellBounds
'e.Padding(値を表示する境界線からの間隔)を考慮して描画位置を決める
Dim rectHeight As Long = e.CellStyle.Padding.Top
Dim rectLeft As Long = e.CellStyle.Padding.Left
idxRect.Inflate(rectLeft, rectHeight)

'行番号を描画する
TextRenderer.DrawText(e.Graphics, _
(e.RowIndex + 1).ToString(), _
e.CellStyle.Font, _
idxRect, _
e.CellStyle.ForeColor, _
TextFormatFlags.Right Or TextFormatFlags.VerticalCenter)
'描画完了の通知
e.Handled = True
End If
End Sub

【RowPostPaintイベント】
Private Sub DataGridView1_RowPostPaint( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewRowPostPaintEventArgs) _
Handles DataGridView1.RowPostPaint

Dim dgv As DataGridView = CType(sender, DataGridView)
'行ヘッダが表示状態の場合のみ処理
If dgv.RowHeadersVisible Then
'行番号を描画する範囲を決定する
Dim idxRect As New Rectangle(e.RowBounds.Left, e.RowBounds.Top, _
dgv.RowHeadersWidth, e.RowBounds.Height)
'e.Padding(値を表示する境界線からの間隔)を考慮して描画位置を決める
Dim rectHeight As Long = e.InheritedRowStyle.Padding.Top
Dim rectLeft As Long = e.InheritedRowStyle.Padding.Left

idxRect.Inflate(rectLeft, rectHeight)
'行番号を描画する
TextRenderer.DrawText(e.Graphics, _
(e.RowIndex + 1).ToString(), _
e.InheritedRowStyle.Font, _
idxRect, _
e.InheritedRowStyle.ForeColor, _
TextFormatFlags.Right Or TextFormatFlags.VerticalCenter)
End If
End Sub

上記のサンプルの説明です。
どちらのサンプルも、TextRenderer.DrawTextメソッドを利用して行ヘッダに行番号を描画しています。

行番号は、TextRenderer.DrawTextメソッドの第2引数で指定しています。
(e.RowIndex + 1).ToString()が、これに該当します。
RowIndexプロパティは、配列の要素と同じく、0(ゼロ)から始まります。
そのため、補正(+1)することで行番号として扱います。

行ヘッダの文字は、横方向は右寄せ、縦方向は中央揃えで表示しています。
これは、TextRenderer.DrawTextメソッドの最後の引数で指定しています。
横方向と縦方向の表示位置をビット演算の論理和(Or)で組み合わせることによって表現しています。
《横方法に指定できる値の一例》
 ・Left(左寄せ)
 ・HorizontalCenter(中央揃え)
 ・Right(右寄せ)
 ※Defaultを指定した場合も左寄せになります。
《縦方向に指定できる値の一例》
 ・Top(上部寄せ)
 ・VerticalCenter(中央揃え)
 ・Bottom(下部寄せ)

【補足事項】
・行ヘッダの幅を変更した場合、ヘッダの幅によって表示位置を自動的に変更します。  (縦幅、横幅のどちらを変更しても、表示位置を適切な位置に保ちます)
・列ヘッダに値を設定するには、以下のようにします。
 DataGridView1.Columns(1).HeaderText = "A"

【参考URL】
 ・DOBON.NET
  DataGridViewの行ヘッダーに行番号を表示する