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 :
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 <%@ 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>
Ayant fait quelques recherches avant, j'ai pu rajouter la fonction MyDataGrid_Page et j'ai également essayé de placer DataGrid1.CurrentPageIndex = 0
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
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.
++
Partager