IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Datagrid & Pagination


Sujet :

ASP.NET

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Points : 5
    Points
    5
    Par défaut Datagrid & Pagination
    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.

    ++

  2. #2
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Bonjour,

    Est ce que t'a mets le PageSize dans ta DataGrid ?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:DataGrid id="DataGrid1" PageSize="10" .....

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Redouane Voir le message
    Bonjour,

    Est ce que t'a mets le PageSize dans ta DataGrid ?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:DataGrid id="DataGrid1" PageSize="10" .....
    Salut,

    je viens de l'ajouter mais ça n'a pas l'air de changer grand chose.

  4. #4
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    essaye de faire dans ton event 'MyDataGrid_Page' au lieu d'appeler tt la méthode 'bindData()'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub MyDataGrid_Page(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs)
     
            Datagrid1.CurrentPageIndex = e.NewPageIndex
            Datagrid1.DataBind()
     
    End Sub
    Bonne courage

  5. #5
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Bnj,

    voici un code qui va bien t'aider:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub MyDataGrid_Page(ByVal sender As Object, ByVal e As DataGridPageChangedEventArgs)
     
    Dim CurrentIndex As Integer = e.NewPageIndex
            If e.NewPageIndex < 0 Or e.NewPageIndex >= Datagrid1.PageCount Then CurrentIndex = 0
            Datagrid1.CurrentPageIndex = CurrentIndex
            bindData()
    End Sub
    bonne courage

Discussions similaires

  1. Datagrid avec pagination + bind vers chart
    Par Yux dans le forum Flex
    Réponses: 0
    Dernier message: 05/10/2010, 14h58
  2. Disparition du Datagrid avec pagination
    Par Hamdi dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/08/2007, 09h53
  3. DataGrid et Pagination
    Par paradeofphp dans le forum ASP.NET
    Réponses: 8
    Dernier message: 29/03/2007, 12h51
  4. DataGrid et pagination ?
    Par lassaad83 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/03/2007, 13h31
  5. [VB.NET]probleme datagrid et pagination
    Par lord_kyshow dans le forum ASP.NET
    Réponses: 5
    Dernier message: 11/05/2005, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo