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 :

Contenu DropDownList modifiable "dynamiquement", comment faire ?


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Points : 54
    Points
    54
    Par défaut Contenu DropDownList modifiable "dynamiquement", comment faire ?
    Bonjour à tous,
    J'ai une DropDownList contenant une liste de destinations.
    Je souhaite que l'utilisateur puisse rajouter/modifier/supprimer des destinations.

    J'étais partie sur la solution suivante mais ca ne marche pas (explications plus bas) :
    - DropDownListDestination liée à une SqlDataSourceDestinationsPersos (basée sur une View basée elle même sur la table "destinations")
    - Pour info : lorsque l'on sélectionne une destination dans la DDL, le nom de celle-ci vient se copier une textbox "destination" et une textbox "mots clés" (mots clés liés à la destination). Cette DLL permet donc d'éviter aux utilisateurs de saisir à chaque fois une même destination (et les mots clés associés...)
    - Pour ajouter/modifier/supprimer des destinations (et les mots clés associés), j'ai créé un bouton à côté de ma DLL
    - Quand on clique sur ce bouton, s'affiche alors un ModalPopUp Ajax avec UpdatePanel
    - Dans cet UpdatePanel, j'ai mis une GridView liée à une SqlDataSourceDestinationsPerso2 (basée la table "destinations") et un bouton "Fermer" (qui ferme le ModalPopUp quand on a fini)

    Tout marche bien (ModalPopUp, UpdatePanel, GirdView...) sauf que quand je clique sur "Fermer" après avoir modifié/ajouté/supprimé une destination, le contenu de ma DDL n'est pas mis à jour.
    / Pour info : si je refraichis ma page (F5) c'est ok... /

    J'ai essayé par mal de truc dont (ce qui me paraissait le plus "logique"), dans le Page_Load :
    If Page.IsPostBack = True Then
    SqlDataSourceDestinationsPersos.DataBind()
    DropDownListDestination.DataBind()
    End If

    Mais ca ne marche pas...
    Pour info, avec le code ci-dessus, une maj se fait bien lorsque je sélectionne une ligne dans ma DLL (donc PostBack, mais c'est hélas trop tard), mais ma DLL contient alors des lignes en doubles, des lignes avec l'ancien contenu (en cas de modif...)...

    Ca fait un moment que je cherche mais je ne trouve pas de solution...

    Peut-être qu'il y a une solution plus simple pour faire ca ?

    Par avance, merci.

  2. #2
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Bon, je suis pas un pro de AJAX, donc ce que je vais te dire pourrait ne pas être valable avec du AJAX.

    Moi, je serais un peu violent. Je ne ferais pas de test sur le PostBack et je ferais un DDL.Item.Clear() et un DDL.DataBind()

    Parce que ta DDL ne pourra se récharger avec ses nouvelles valeurs que si le PostBack est à False et comme tu le test à True, ben ça recharge pas.

    Moi, je fais toujours un If Not IspostBack then.....

    Kenavo
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Bon, je suis pas un pro de AJAX, donc ce que je vais te dire pourrait ne pas être valable avec du AJAX.

    Moi, je serais un peu violent. Je ne ferais pas de test sur le PostBack et je ferais un DDL.Item.Clear() et un DDL.DataBind()

    Parce que ta DDL ne pourra se récharger avec ses nouvelles valeurs que si le PostBack est à False et comme tu le test à True, ben ça recharge pas.

    Moi, je fais toujours un If Not IspostBack then.....

    Kenavo
    J'ai donc laissé dans mon Page_Load que :
    SqlDataSourceDestinationsPersos.DataBind()
    DropDownListDestination.Items.Clear()
    DropDownListDestination.DataBind()

    Mais ca ne marche toujours pas...
    Par contre, je n'ai plus de pb de doublons apparement...

    Je crois que le problème vient de SqlDataSourceDestinationsPersos.DataBind() qui ne fait pas de "refresh" comme je l'espérais (DataBind est la seule fonction que j'ai trouvée qui pourrait faire un "refresh" d'un SqlDataSource) donc le contenu du DataSet de la SqlDataSource ne change pas et donc la DLL récupère le même contenu...

  4. #4
    Membre extrêmement actif
    Avatar de zooffy
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2004
    Messages
    3 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2004
    Messages : 3 895
    Points : 1 434
    Points
    1 434
    Par défaut
    Encore une fois, n'étant pas pro du tout de AJAX, je ne sais pas du tout comment il gère les postBack et les aller retour serveur.

    Toutefois, je n'ai jamais fait de DataBind sur un SqlDataSource.
    De ce que j'ai compris de ce truc là c'est une simple liaison vers la BDD.
    Essaie sans le DataBind, histoire de voir.

    D'un autre côté, essaie e voir avec AJAX comment forcer un aller retour serveur. Si mes connaissances sont bonnes, AJAX Est justement fait pour éviter les aller retour serveur au maximum. Mais je sais qu'il y a des objet dedans qui permettent de faire des aller retour serveur sans recharger la page de "devant".
    Essaie de creuser du côté du XmlHttpRequest, peut être que tu auras una solution par là.

    Kenavo
    Mon blog de création d'univers : Qualhiryann
    Mon site qui parle de moi www.ozouf.com
    Pour les joueurs de WOW je suis sur Ysondres et mon perso est Ablanore.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par zooffy Voir le message
    Encore une fois, n'étant pas pro du tout de AJAX, je ne sais pas du tout comment il gère les postBack et les aller retour serveur.

    Toutefois, je n'ai jamais fait de DataBind sur un SqlDataSource.
    De ce que j'ai compris de ce truc là c'est une simple liaison vers la BDD.
    Essaie sans le DataBind, histoire de voir.

    D'un autre côté, essaie e voir avec AJAX comment forcer un aller retour serveur. Si mes connaissances sont bonnes, AJAX Est justement fait pour éviter les aller retour serveur au maximum. Mais je sais qu'il y a des objet dedans qui permettent de faire des aller retour serveur sans recharger la page de "devant".
    Essaie de creuser du côté du XmlHttpRequest, peut être que tu auras una solution par là.

    Kenavo
    Le PostBack se fait bien quand je clique sur "Fermer" (j'ai vérifié en mode "Débug" que je passais bien dans Page_Load ).
    Pour info : des PostBack se font aussi "avec" la GridView, je pense d'ailleurs que ce serait plus propre de faire le "refresh" du SqlDataSource (si j'arrive à trouver comment faire) au moment d'un "Update" de la GridView (plutot que dans le Page_Load) ...

    Je suis persuadé que le problème vient du DataBind du SqlDataSource qui ne refraichis pas les données comme je le pensais à tord...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 98
    Points : 54
    Points
    54
    Par défaut
    Personne n'a d'idée pour "rafraichir" les données d'un SQLDataSource ?
    Je crée un nouveau post plus explicite...

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