je cherche a faire du datagrid avec de la pagination dans des pages aspx. ma datagrid fonctionne tres bien sous tout les points sauf pour la pagination (elle permet l'edition, la suppression de mandats) car je n'ai toujours que la 1ere page qui s'affiche

Le datagrid dans ma page page aspx etant le suivant:

<asp:datagrid id="DataGrid1" runat="server" OnEditCommand="DataGrid1EditHandler"
EditItemStyle-BackColor="#AAAAAA"
OnCancelCommand="DataGrid1CancelHandler"
UpdateCommand="DataGrid1UpdateHandler"
AllowSorting="True"
OnSortCommand="DataGrid1EventHandler"
AlternatingItemStyle-BackColor="#99ffcc"
CellSpacing="2"
OnItemCommand="DataGrid1_ItemCommand" AutoGenerateColumns="False"
CellPadding="2"
width="50%"
OnPageIndexChanged="DataGrid1_Page"
PagerStyle-HorizontalAlign="Right"
PagerStyle-Mode="NumericPages"
PageSize="2"
AllowPaging="True"
AllowCustomPaging="True">
<HeaderStyle BackColor="#6699cc"
HorizontalAlign="Center" Font-Bold="True" />
<Columns><asp:BoundColumn DataField="NUM_MANDAT" ReadOnly Visible="false" />
<asp:BoundColumn DataField="INTITULE_MANDAT" SortExpression="INTITULE_MANDAT" HeaderText="Liste Mandats">
<ItemStyle HorizontalAlign="Center" />
</asp:BoundColumn>
<asp:EditCommandColumn EditText="Modifier" HeaderText="" ButtonType="PushButton" UpdateText="Valider" CancelText="Annuler">
<ItemStyle HorizontalAlign="Center" />
</asp:EditCommandColumn>
<asp:ButtonColumn CommandName="supprimer" Text="Supprimer" HeaderText="" ButtonType="PushButton">
<ItemStyle HorizontalAlign="Center" />
</asp:ButtonColumn>
</Columns>
</asp:datagrid>

et cedci etant le code commenté de ma page aspx.vb
Imports System
Imports System.Data.SqlClient
Imports System.IO


Public Class WebForm6
Inherits System.Web.UI.Page

#Region " Code généré par le Concepteur Web Form "

'Cet appel est requis par le Concepteur Web Form.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub
Protected WithEvents form1 As System.Web.UI.HtmlControls.HtmlForm
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents Button2 As System.Web.UI.WebControls.Button
Protected WithEvents val_a_ajouter As System.Web.UI.WebControls.TextBox
Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid

'REMARQUE : la déclaration d'espace réservé suivante est requise par le Concepteur Web Form.
'Ne pas supprimer ou déplacer.
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
'Ne le modifiez pas en utilisant l'éditeur de code.
InitializeComponent()
End Sub

#End Region
'cette fonction permet de rafraichir le tableau
Sub charger_grille()
'chaine de connexion a la base
Dim strConnection As String = Global.loginbase
'definition de la requete
Dim strRequete As String = "SELECT * FROM MANDAT"
'creation de la connection
Dim connection As New SqlConnection(strConnection)
'creation de la requete
Dim requete As New SqlCommand(strRequete, connection)
'ouverture de la connection
connection.Open()
'execution de la requete et fermeture de celle ci a quand l'objet datareader se ferme
DataGrid1.DataSource = requete.ExecuteReader(CommandBehavior.CloseConnection)
'lie le controle a la source de données
DataGrid1.VirtualItemCount = DataGrid1.Items.Count
DataGrid1.DataBind()
'fermeture de la connection par sécurité
connection.Close()
End Sub

'fonction qui se lance au chargement de la page
'on en profite pour raffraichir l'ecran
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'si la page n'est pas en chargement, ni en reponse a une publication du client
',ni en reponse a une premiere demande d'acces
If (Not Page.IsPostBack) Then
'alors on raffraichit le tableau
charger_grille()
End If
End Sub

'fonction qui se lance quand on clique sur un bouton modifier du tableau
Sub DataGrid1EditHandler(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
'on edite la ligne du tableau qui doit être modifiée
DataGrid1.EditItemIndex = e.Item.ItemIndex
'on recharge le tableau
charger_grille()
End Sub

'fonction qui se lance quand on clique sur un bouton annuler du tableau
Sub DataGrid1CancelHandler(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
'dans ce cas, si on clique sur annule, on ne doit plus etre en edition!
DataGrid1.EditItemIndex = -1
'on recharge le tableau
charger_grille()
End Sub
'fonction qui affiche un message d'avertissement
Public Sub ShowAlert(ByVal Message As String)
Dim MyAlertLabel As New Label
MyAlertLabel.Text = "<script language='vbscript'>" & _
vbNewLine & "Alert(" & """" & Message & """" & ")" & _
vbNewLine & "</script>"
Page.Controls.Add(MyAlertLabel)
End Sub

'fonction qui transorme une chaine pour que si elle contient une quote
', elle soit bien gérée par la requete sql
'le principe est de tripler toutes les quotes rencontrées
Public Function DoubleApost(ByVal chaine)
Dim i
Dim modif
'on parcours la chaine
For i = 1 To Len(chaine)
'si on trouve une quote
If Mid(chaine, i, 1) = "'" Then
'on rajoute deux quotes
modif = modif & "''"
Else
'sinon on rajoute le caractere
modif = modif & Mid(chaine, i, 1)
End If
Next
'on retourne la chaine modifiee
DoubleApost = modif
End Function

'fonction appelée quand on rajoute un enregistrement
Sub btn_command(ByVal Sender As Object, ByVal e As CommandEventArgs)
'on recupere la valeur a ajouter
Dim valeur As String = val_a_ajouter.Text
'on transorme cette chaine en chaine compatible sql
valeur = DoubleApost(valeur)
'chaine de connexion a la base
Dim strConnection As String = Global.loginbase
'definition de la requete
Dim strRequete As String = "INSERT INTO MANDAT(INTITULE_MANDAT) VALUES('" + valeur + "')"
'creation de la connection
Dim connection As New SqlConnection(strConnection)
'creation de la requete
Dim requete As New SqlCommand(strRequete, connection)
'ouverture de la connection
connection.Open()
Try
'on essaye d'effectuer la requete
requete.ExecuteNonQuery()

Catch
'si ca ne marche pas, cela signifie que l'enregistrement existe deja, dans ce cas message d'erreur
ShowAlert("enregistrement déjà existant, insertion refusée")
End Try
'fermeture de la connection
connection.Close()
'raffraichissement du tableau
charger_grille()
End Sub

'mise a jour d'un enregistrement
Sub DataGrid1UpdateHandler(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
'recuperation de l'identifiant
Dim idmandat As String = e.Item.Cells(0).Text
'recuperation de sa valeur
Dim intitule As TextBox = e.Item.Cells(1).Controls(0)
'creation de la requete en validant les chaines
Dim strRequete As String = "UPDATE MANDAT SET INTITULE_MANDAT = '" + DoubleApost(intitule.Text) + "' WHERE NUM_MANDAT=" + idmandat
'chaine de connexion a la base
Dim strConnection As String = Global.loginbase
'creation de la connection
Dim connection As New SqlConnection(strConnection)
'creation de la requete
Dim requete As New SqlCommand(strRequete, connection)
'ouverture de la connection
connection.Open()
Try
'on essaye d'effectuer la requete
requete.ExecuteNonQuery()

Catch
'si ca ne marche pas, cela signifie que l'enregistrement existe deja, dans ce cas message d'erreur
ShowAlert("enregistrement déjà existant, insertion refusée")
End Try
'fermeture de la connection
connection.Close()
'on annule le mode d'edition
DataGrid1.EditItemIndex = -1
'raffraichissement du tableau
charger_grille()
End Sub

'pour trier par ordre alphabétique les enregistrements selon la colonne selectionnée
Sub DataGrid1EventHandler(ByVal sender As Object, ByVal e As DataGridSortCommandEventArgs)
'creation de la requete avec le tri
Dim strRequete As String = "SELECT * FROM MANDAT ORDER BY " + e.SortExpression
'chaine de connexion a la base
Dim strConnection As String = Global.loginbase
'creation de la connection
Dim connection As New SqlConnection(strConnection)
'creation de la requete
Dim requete As New SqlCommand(strRequete, connection)
'ouverture de la connection
connection.Open()
'execution de la requete et fermeture de celle ci a quand l'objet datareader se ferme
DataGrid1.DataSource = requete.ExecuteReader(CommandBehavior.CloseConnection)
'lie le controle a la source de données
DataGrid1.DataBind()
'fermeture de la connection
connection.Close()
'raffraichissement du tableau
charger_grille()
End Sub
'suppression d'un enregistrement
Sub suppr(ByVal resul As String)
'definition de la requete
Dim strRequete2 As String = "DELETE MANDAT WHERE NUM_MANDAT=" + resul
'chaine de connexion a la base
Dim strConnection As String = Global.loginbase
'creation de la connection
Dim connection As New SqlConnection(strConnection)
'creation de la requete
Dim requete As New SqlCommand(strRequete2, connection)
'ouverture de la connection
connection.Open()
'execution de la requete
requete.ExecuteNonQuery()
'fermeture de la connection
connection.Close()
End Sub
'quand on clique sur un bouton
Sub DataGrid1_ItemCommand(ByVal Sender As Object, ByVal e As DataGridCommandEventArgs)
'recuperation de l'id de l'enregistrement
Dim strResultat As String = e.Item.Cells(0).Text
'recuperation du bouton cliqué
Dim commande As String = e.CommandName
'si on a clique sur supprimer
If (commande = "supprimer") Then
'on supprime l'enregistrement grace a l'ide recupéré
suppr(strResultat)
End If
'raffraichissement du tableau
charger_grille()
End Sub

Sub DataGrid1_Page(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
DataGrid1.CurrentPageIndex = e.NewPageIndex
charger_grille()
End Sub


End Class

j'ai essaye de mettre une valeur au hazard pour mon DataGrid1.VirtualItemCount (=10) par exemple et donc la ca me marque bien 5 liens en bas de la page!. j'en ai donc conclu que DataGrid1.Items.Count recuperait le nombre de lignes affichées dans le tableau donc 2 lignes (grace au page size) et que donc j'aurais toujours une seule page
je suppose donc que DataGrid1.Items.Count n'est pas correct mais comment recupéré le nombre d'enregistrements de mon datagrid sans passer par une seconde requete sql!!!!

ensuite, quand j'ai bien le bon nombre de liens, quand je clique sur la page deux par exemple ca ne fait rien

merci par avance de vottre aide[/b]