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

Développement Web avec .NET Discussion :

ASP.Net : Cycle de vie des données affichées


Sujet :

Développement Web avec .NET

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut ASP.Net : Cycle de vie des données affichées
    Bonjour,

    J'ai une appli ASP.Net 2.0 au sein de laquelle l'utilisateur saisit des critères de recherche et clique sur un bouton "Rechercher".

    A ce moment, je fais une requête en base et construis le tableau de résultats à l'aide d'un GridView. J'effectue de la customisation de ce Gridview (ajout de sous-usercontrols dans une cellule etc.) via l'événement "RowDatabound", et ce pour afficher un objet un peu complexe.

    Si je mets ce GridView dans mon Viewstate, à chaque postback je perds les opérations de custo. (des contrôles disparaissent), ce qui n'est pas acceptable. Aurais-je dû faire une action particulière pour "commiter" mes modifications dans le ViewState ?

    Par ailleurs, mon tableau peut s'avérer volumineux, donc la solution du Viewstate ne me plaît pas vraiment (ça fait grossir les pages). Donc je positionne le ViewState du Gridview à False, et à chaque Postback je dois intégralement reconstruire ce tableau de résultats... en resoumettant la requête SQL, ce qui n'est pas du tout optimisé et performant en temps de réponse... Quel pattern devrais-je adopter (en évitant la Session) ??

    J'espère être clair dans mon explication !? Merci pour vos conseils !

    Mickaël.

  2. #2
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Bonjour chaillom,

    C'est un problème qui n'en est pas un en fait. Je t'invite à consulter l'article sur MSDN (ou les nombreux blogs y référant) qui explique le cycle de vie d'une page ASP.NET et notamment à quel moment est chargé le ViewState. Tu verras que pour les User-Control, il vaut mieux les loader avec le Page_Load, sinon lors du chargement du ViewState, l'association avec le contrôle désiré ne peux se faire.... car il n'est pas encore créé dans ta page (le DataBound intervient après).

    En espérant t'avoir aidé.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse Nicolas, mais je ne comprends pas bien

    Voilà grosso modo ce que je fais (en m'appuyant ici sur un exemple bidon de Voiture):

    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
    // Code qui fonctionne mais je fais un accès en base à chaque PostBack, ce qui n'est pas performant.
    
    Côté ASP.Net:
    <asp:GridView ID="myGridView" runat="server" EnableViewState="False"></asp:GridView>
    
    Page_Load()
    {
        // Lecture en base des voitures recherchées
        List<Voiture> cars = MyDataAccess.GetCars(this.Criterias);
    
        // Affichage des voitures.
        myGridView.DataSource = cars;
        myGridView.DataBind();
    }
    
    myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        GridViewRow gvw = e.Row;
        Voiture carOfTheRow = (Voiture)gvw.DataItem;
    
        foreach(Roue roue in carOfTheRow.Roues)
        {
           // Instanciation de l'affichage du détail de la roue.
           Control ctlRoue = LoadControl("UcRoue.ascx");
           ((UcRoue)ctlRoue).Init(roue);
    
           // Ajout dans l'une des cellules.
           e.Row.Cells[3].Controls.Add((UcFrameVersion)ctrl);   
        }
    }
    Mais j'aimerais pouvoir faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Page_Load()
    {
       if(!IsPostBack)
       {
            // Lecture en base des voitures recherchées
            List<Voiture> cars = MyDataAccess.GetCars(this.Criterias);
     
            // Affichage des voitures.
            myGridView.DataSource = cars;
            myGridView.DataBind();
        }
    }
    Que devrais-je changer ?

    Encore merci.

  4. #4
    Expert confirmé
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Points : 4 066
    Points
    4 066
    Par défaut
    Pourquoi n'utilises-tu pas simplement un ObjectDataSource ?

    Ensuite, perdre les données dans la GridView ( pas de Bind) et perdre les infos du ViewState pour des UserControls chargés dynamiquement ce sont deux choses différentes.

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/04/2013, 22h46
  2. Réponses: 13
    Dernier message: 03/08/2007, 10h07
  3. Dureé de vie des données dans un flash disque
    Par Tsimplice dans le forum Composants
    Réponses: 5
    Dernier message: 28/05/2007, 10h01
  4. Réponses: 3
    Dernier message: 05/09/2006, 10h49
  5. Réponses: 2
    Dernier message: 18/12/2002, 10h30

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