DataGrid: botones de navegación personalizados

    Nos conectamos con una base de datos de Microsoft Access y, por código, creamos un DataGrid. Aunque el DataGrid es un control muy potente que nos provee de sus propios botones de navegación integrados, puede haber ocasiones en que deseemos generar nuestros botones personalizados y actuar de determinada manera ante eventos como el click del botón. En este caso hay que generar también los métodos de navegación para controlar esos eventos del botón. Nos moveremos por las distintas páginas del DataGrid modificando la propiedad CurrentPageIndex por código.

    El código es sencillo, primero se crean los botones en el formulario Web, definiendo qué método se ejecuta al pulsar en el botón:

<asp:Button id="btUno"
    onclick="btUno_click"
    runat="server"
    Text="Primera página"
></asp:Button>
<asp:Button
id="btNext"
    onclick="btNext_click"
    runat="server"
    Text="Página siguiente"
></asp:Button>
<asp:Button
id="btPrev"
    onclick="btPrev_click"
    runat="server"
    Text="Página anterior"
></asp:Button>
<asp:Button
id="btFin"
    onclick="btFin_click"
    runat="server"
    Text="Última página"
></asp:Button>

    Después se desarrolla el método adecuado en el código Visual Basic, configurando la propiedad CurrentPageIndex:

'Al pulsar el botón "Inicio", el índice de la página del DataGrid es 0
Sub btUno_click (obj as Object, e as EventArgs)
dgDatos.CurrentPageIndex = 0
dgDatos.DataBind()
End Sub

'Al pulsar el botón "Final" el índice de la página del DataGrid es 56
Sub btFin_click (obj as Object, e as EventArgs)
'dgDatos.CurrentPageIndex = 55
dgDatos.CurrentPageIndex = dgDatos.PageCount - 1
dgDatos.DataBind()
End Sub

'Al pulsar el botón "Siguiente" el índice de la página del DataGrid aumenta en 1
Sub btNext_click (obj as Object, e as EventArgs)
'Si no estamos en la última página
If dgDatos.CurrentPageIndex < (dgDatos.PageCount - 1) Then
dgDatos.CurrentPageIndex += 1
dgDatos.DataBind()
End If
End Sub


'Al pulsar el botón "Anterior" el índice de la página del DataGrid disminuye en 1
Sub btPrev_click (obj as Object, e as EventArgs)
'Si no estamos en la primera página
If dgDatos.CurrentPageIndex > 0 Then
dgDatos.CurrentPageIndex -= 1
dgDatos.DataBind()
End If
End Sub

    Para terminar, cada vez que pulsemos en un botón de navegación ha de cambiar la página mostrada, se hace igualando el índice de la página del DataGrid con el nuevo índice originado por la pulsación del botón:

'Al pulsar en los botones de navegación, cambia el índice de la página mostrada
Sub dgDatos_IndexChanged(ByVal obj As Object, ByVal e As DataGridPageChangedEventArgs)
 dgDatos.CurrentPageIndex = e.NewPageIndex
 dgDatos.DataBind()
End Sub

    La página aspx contiene el código HTML y Asp.NET y un archivo externo contiene el código Visual Basic