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 :

GridView et postback [Débutant]


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Points : 167
    Points
    167
    Par défaut GridView et postback
    Bonjour à tous,

    Je bute sur un problème, je ne sais pas comment ré-afficher mes gridview après un postback :

    Mon application est découpée selon le modèle 3-tiers.

    Je génère des gridview de façon dynamique, c'est à dire que ma page peut afficher 1 à n gridview selon la demande de l'utilisateur.

    Le problème, c'est que deux actions sont possibles sur la page mais les deux me font disparaitre mes gridview

    Je pensais faire un "gridview.databind()" mais j'ai plusieurs problèmes avec cette méthode :

    - le gridview.DataSource n'existe plus après un postback
    - Je ne peux pas stocker ces DataSource avec un Session ou ViewState
    - Je ne sais pas si mes gridview seront placés au bon endroit car je génère de façon aléatoire la création de Table, TableRow etc

    Est-ce que quelqu'un à une idée ? Je peux fournir du code au besoin

    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Points : 167
    Points
    167
    Par défaut
    Pas moyen de trouver une solution .. Je vous détaille mon code si ça peut aider :

    J'ai une page en aspx qui contient une textbox, deux boutons et un placeHolder.

    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
    <asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="Server">
     
        <asp:TextBox ID="TextBoxSearch" runat="server"></asp:TextBox>
     
        <asp:Button ID="ButtonSearch" runat="server" Height="34px" Text="Ok"/>
     
        <p>
            <asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder>
        </p>
     
        <p>
            <asp:Button ID="ButtonExport" runat="server" Text="Export Data"/>
        </p>
     
    </asp:Content>
    Lorsque l'utilisateur clique sur le premier bouton (TextBoxSearch), je regarde ce que contient la textbox et exécute une requête qui me retourne un ou plusieurs résultats.

    Comme je ne connais pas le nombre de résultats que me retourne ma requête, je créé des gridview dynamiquement auxquels j'associe des checkbox.

    Le problème, c'est au postback, mes gridviews disparaissent et je n'ai aucun moyen de récupérer les DataSource pour refaire un bind.

    J'espère que quelqu'un a une petite idée car je bloque vraiment ..

    Merci

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Jah73 Voir le message
    Le problème, c'est au postback, mes gridviews disparaissent et je n'ai aucun moyen de récupérer les DataSource pour refaire un bind.
    Ben il faut que tu persistes les infos dont tu as besoin afin de récupérer les DataSources. Donc tu n'as pas d'autre solution que de passer par la Session ou par le ViewState ou encore le cache... Dans ton premier post, pourquoi dis-tu que tu ne peux pas les utiliser ?

  4. #4
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Points : 167
    Points
    167
    Par défaut
    Bonjour DotNetMatt,

    Je ne parviens pas à récupérer les datasources car ils sont dans la couche d'accès aux données et je ne peux pas faire de "Session".

    De plus, je ne vois pas comment je peux récupérer dynamiquement. Il faudrait que je fasse un "tableau" de Session ?

    Merci pour ton aide !

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Ok je vois En fait normalement la création de la source de données doit se faire comme suit :
    1. L'UI demande à la BLL la source de données
    2. La BLL valide (éventuellement) les infos qu'elle reçoit en entrée, puis elle envoie la demande à la DAL.
    3. La DAL génère la source de données, puis la renvoie à la BLL.
    4. La BLL valide (éventuellement) les infos qu'elle reçoit de la DAL et applique (éventuellement) des règles métier.
    5. La BLL renvoie la source de données à l'UI.

    Suite à cela, il y a alors plusieurs possibilités :
    - Tu peux stocker la source de données en session
    - Tu peux solliciter demander la création de la source de données à chaque postback

  6. #6
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Points : 167
    Points
    167
    Par défaut
    C'est exactement ce que je fais

    Je suis entrain de développer ton idée :
    Tu peux stocker la source de données en session
    Pour ce faire, je pensais récupérer les gridview.datasource de la couche DAL. Je stocke ces datasource dans un array que je renvoie à l'UI qui garde cette array en session. A chaque postback, je fais un foreach de mon array où je bind les datasource.

    Qu'est ce que tu en penses ?

    Encore merci pour ton aide

  7. #7
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 742
    Points
    9 742
    Billets dans le blog
    3
    Par défaut
    Oui ça peut être une solution Par contre lorsque tu fais ça, il ne faut pas oublier que tes données peuvent "périmer". Par exemple à 10h00 un utilisateur arrive, tu lui mets des données en session. Ensuite à 10h10 il réutilise ces données, mais entre temps elles ont été modifiées en base de données... Il ne travaillera donc pas sur les données les plus récentes.

  8. #8
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Points : 167
    Points
    167
    Par défaut
    Ca fonctionne !!

    Merci DotNetMatt pour tes conseils !

    Pour ceux qui sont intéressés :

    Vu que mes gridViews sont générés dynamiquement, je récupère tous mes SqlCommand que je stocke dans une Session. Avec cette méthode, quand l'utilisateur clique quelque part, je bind mes gridview présent dans ma Session et ils réapparaissent

    Cela me permet de recharger les données comme m'a conseillé DotNetMatt.

    Il y a aussi le fait que la page ne maintenait pas sa position après un postback. Il suffit juste de placer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaintainScrollPositionOnPostback="true"
    dans la balise du .aspx

    Encore merci

    Jah

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sauver l'etat d'un gridview pour postback
    Par patrice419 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 11/05/2012, 18h38
  2. GridView + TextBox + PostBack
    Par Neodream dans le forum Débuter
    Réponses: 2
    Dernier message: 15/04/2010, 15h03
  3. Modifier la requête gridview à chaque postBack
    Par stroumfs dans le forum ASP.NET
    Réponses: 1
    Dernier message: 01/02/2009, 19h30
  4. Gridview, footer, postback et lifecycle
    Par mcolo dans le forum ASP.NET
    Réponses: 1
    Dernier message: 18/09/2008, 14h58
  5. Gridview Problème Postback
    Par hippoX dans le forum ASP.NET
    Réponses: 8
    Dernier message: 17/07/2007, 13h31

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