Bonjour à tous,

Je commence tout juste à apprendre le vb.net/asp.net et après plusieurs jours de théorie je commence la pratique. c'est donc là qu'arrivent les problèmes

J'ai pu trouver sur ce même forum des sujets très similaires, cependant je n'ai pas réussi pour autant à régler mon problème, peut-être à cause d'une mauvaise compréhension de certaines réponses... Quoiqu'il en soit, voici mon souci :

J'essaye d'utiliser un datagrid qui va prendre sa source dans une base de donnée SQLServer. En m'inspirant de mes cours et de plusieurs codes trouvés à droite et à gauche j'ai pu réussir à faire quelque chose qui marche plutôt bien. le hic survient quand j'essaye la propriétés (je connais pas le mot exact vous m'en excuserez) "pagination" du Datagrid. La 1ère page s'affiche bien, mais les suivantes non...
EDIT: rectification : avant elles ne s'affichaient pas, maintenant après avoir ajouté l'évenement OnPageIndexChanged celà m'indique :
Valeur CurrentPageIndex non valide. Elle doit être >= 0 et < PageCount.

Voici mon code :
dataSql.aspx :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ Page Language="vb" src="dataSql.aspx.vb" Inherits="WebForms" Debug="true"%>
<html>
<head>
</head>
<body>
    <form id="Form1" runat="server">
        <asp:DataGrid id="DataGrid1" runat="server" CellPadding="4" AllowSorting="True" ForeColor="#333333" GridLines="None" ShowFooter="True" style="text-align: center" AllowPaging="True" OnPageIndexChanged="MyDataGrid_Page">
            <FooterStyle forecolor="White" backcolor="#507CD1" Font-Bold="True"></FooterStyle>
            <HeaderStyle font-bold="True" forecolor="White" backcolor="#507CD1"></HeaderStyle>
            <PagerStyle horizontalalign="Center" forecolor="White" backcolor="#2461BF" Mode="NumericPages" NextPageText="Suivant" PrevPageText="Précédent"></PagerStyle>
            <SelectedItemStyle font-bold="True" forecolor="#333333" backcolor="#D1DDF1"></SelectedItemStyle>
            <ItemStyle backcolor="#EFF3FB"></ItemStyle>
            <EditItemStyle BackColor="#2461BF" />
            <AlternatingItemStyle BackColor="White" />
        </asp:DataGrid>
    </form>
</body>
</html>
Et dataSql.aspx.vb :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.UI.WebControls
 
Public Class WebForms
    Inherits System.Web.UI.Page
    ' données de la page web à afficher
    ' les données globales
 
    Public sqlConn As New SqlConnection
    Dim myDataTable As New DataTable("video_games")
 
    Protected DataGrid1 As DataGrid
    ' procédure exécutée au chargement de la page
    Sub page_Load(ByVal sender As Object, ByVal e As EventArgs)
        If Not IsPostBack Then
            createDataSources()
            ' liaison à un tableau [Array]
            'DataGrid1.CurrentPageIndex = 0
            bindData()
        End If
    End Sub
 
    Sub createDataSources()
 
        myDataTable.Columns.Add("ID", Type.GetType("System.Int32"))
        myDataTable.Columns.Add("Nom", Type.GetType("System.String"))
        myDataTable.Columns.Add("Possesseur", Type.GetType("System.String"))
        myDataTable.Columns.Add("Console", Type.GetType("System.String"))
        myDataTable.Columns.Add("Prix", Type.GetType("System.Double"))
        myDataTable.Columns.Add("Nb joueurs", Type.GetType("System.Int16"))
        myDataTable.Columns.Add("Commentaires", Type.GetType("System.String"))
 
        Dim ligne As DataRow
 
        sqlConn.ConnectionString = "Data Source=MY-COMP\SQLEXPRESS;Initial Catalog=db_test;Integrated Security=SSPI;"
        sqlConn.Open()
 
        Dim myCommand As New SqlCommand("SELECT * FROM jeux_video", sqlConn)
        Dim myReader As SqlDataReader = myCommand.ExecuteReader()
        While myReader.Read()
            ligne = myDataTable.NewRow
            ligne("ID") = myReader.getValue(0).toString
            ligne("Nom") = myReader.getString(1)
            ligne("Possesseur") = myReader.getString(2)
            ligne("Console") = myReader.getString(3)
            ligne("Prix") = myReader.getValue(4).toString
            ligne("Nb joueurs") = myReader.getValue(5).toString
            ligne("Commentaires") = myReader.getString(6)
            myDataTable.Rows.Add(ligne)
        End While
        myReader.Close()
        sqlConn.Close()
    End Sub
 
    ' liaison tableau
    Sub bindData()
        ' l'association aux composants
        With DataGrid1
            .DataSource = myDataTable
            .DataBind()
        End With
    End Sub
 
    Sub MyDataGrid_Page(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs)
 
        Datagrid1.CurrentPageIndex = e.NewPageIndex
        bindData()
    End Sub
 
End Class
Ayant fait quelques recherches avant, j'ai pu rajouter la fonction MyDataGrid_Page et j'ai également essayé de placer DataGrid1.CurrentPageIndex = 0
qui est commenté dans ce code car je ne sais pas trop où le placer.

Malgré ces efforts je n'ai pas réussi à faire fonctionner correctement mon application, je demande donc votre aide

De plus, j'aimerais également avoir quelques explications/conseils:
Comment fonctionne réellement cette pagination? Est-ce que je m'y prends bien?
En effet j'ai déjà réalisé des systemes de pagination en PHP par exemple, et le but principal était l'économie de ressources interne et à l'affichage.

Or dans mon code VB.net, il me semble que je charge tout le résultat de la requête en mémoire, et que le datagrid ensuite se charge d'afficher juste une partie. Ca me parait pas très élégant... J'ai donc pensé à faire un système de LIMIT x,y dans ma requête SQL, cependant j'imagine que celà va tout fausser... En effet si je fait un LIMIT 0,10 , j'imagine que mon DataGrid ne va afficher qu'une seule page (j'affiche 10 résultats par page).

Voilà mes réflexions/interrogations, j'espère que vous pourrez m'éclairer

Toute critique/remarque constructive pour améliorer mon code est bienvenue.

++