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 :

perte de données suite à ajout dans repeater


Sujet :

ASP.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut perte de données suite à ajout dans repeater
    Bonjour

    J'ai un Repeater qui contient plusieurs DropDownList dans ItemTemplate. Il y a également un bouton qui permet d'ajouter des lignes dans le repeater.
    J'ai enfin un bouton Supprimer dans chaque ligne qui supprime la ligne en question.
    Dans le code behind, je commence par définir la source du repeater sur une liste d'objets qui contiennent eux aussi des listes. (la liste d'objet pour le repeater et les sous-liste pour les dropdownlist)

    dans les evenements ItemCreated, je remplie les dropdownlist à partir des sous-liste de l'objet de la ligne concernée. (j'espère que c'est clair).

    entre chaque chargement, j'enregistre ma liste d'objet dans une variable session.
    Dans la methode d'ajout, j'ajoute un objet à ma liste et je fais un DataBind().
    Dans la methode de suppression, je retrouve la ligne à partir de "sender", je supprime l'objet correspondant et fait un DataBind().

    Ça marche bien, sauf qu'à chaque fois j'ajoute ou supprime une ligne, je perd les valeurs sélectionnées des autres lignes.
    Par contre un rechargement de la page pour autre chose conserve les valeurs dans les dropdownlist.

    J'ai essayé de les récuperer dans le POST et de les réaffecter, mais le code commence à faire usine à gaz pour quelque chose de banal, de plus les clientID n'ont pas toujours l'air d'être identique.

    Comment puis-je faire en sorte de toujours garder les valeurs selectionnées quelque soit l'évenement ?

    Si possible de manière simple, gérée par le framework.

    Merci
    Rémi

  2. #2
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    400
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 400
    Points : 444
    Points
    444
    Par défaut
    En tout cas le comportement du Framework est normal. A chaque fois que tu exécute un DataBinding tu réinitialise les listes.
    tu peux peut-être réaliser un postback sur le changement de la liste déroulante en positionnant la propriété AutoPast à vrai, et côté behind tu récupère la valeur sélectionner et tu modifie ton objet en question qui est en session.

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Décembre 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 96
    Points : 88
    Points
    88
    Par défaut
    OK merci

    Je voudrais éviter de recharger la page a chaque fois.
    Je vais donc les reprendre dans le POST (à moins de pouvoir faire autrement ?).

    Voici ce que je fais :
    Dans l'evenement Unload, je prend les UniqueID de chaque DropDownList les garde en mémoire dans l'objet en session. Puis, dans Init sous condition d'un postback, j'obtient la valeur à partir de Request.Form[leUniqueID]" et je met à jour l'objet en session.

    J'avais comme probleme que je lisais l'UniqueId dans l'evenement ItemCreated, ce qui a apperemment comme effet de les modifier en quelque chose d'identique pour chaque ligne du Repeater (donc plus rien d'unique).
    En fait le simple fait d'ajouter la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Diagnostics.Debug.WriteLine(ddlLang.UniqueID);
    dans ItemCreated fait passer l'UniqueID "ctl00$main$repFilters$ctl01$ddlLang" à "ddlLang" dans le code source de la page. (????)

    Je comprends pas mais c'est pas grave, maintenant ça marche.

    @+

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

Discussions similaires

  1. Perte de données suite a une panne d'électricité
    Par mario9 dans le forum Bases de données
    Réponses: 3
    Dernier message: 19/07/2011, 02h33
  2. [NFS] Perte de données suite à coupure de courant
    Par lavazavio dans le forum Réseau
    Réponses: 2
    Dernier message: 28/07/2010, 15h58
  3. Manque colonne suite à ajout dans la table
    Par BipBipBO dans le forum Designer
    Réponses: 4
    Dernier message: 27/10/2009, 10h55
  4. Réponses: 8
    Dernier message: 04/06/2009, 15h53
  5. perte de données suite plantage
    Par patbeautifulday1 dans le forum Access
    Réponses: 1
    Dernier message: 21/02/2006, 16h12

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