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 :

RadioButtonList et SelectedIndexChanged


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut RadioButtonList et SelectedIndexChanged
    Bonjour a tous,

    J'aurais besoin d'une petite aide a propos du RadioButtonList.
    J'aimerais que lorsque je change l'index du RadioButtonList, un test soit fait avant de lancer ma fonction SelectedIndexChanged.

    Exemple:

    J'ai mis ce petit bout de code dans la fonction DataBound de mon RadioButtonList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonRBL.Attributes.Add("OnChange", "if (confirm('Sure ?')) {" + Page.GetPostBackEventReference(((RadioButtonList)sender)) + ";}");
    La popup est lancee me demandant de confirmer ("Sure?"). Lorsque je clique sur OK, ma fonction SelectedIndexChanged est bien executee. Et si je clique sur cancel, elle ne l'est pas. Tout ce passe comme je le veux. Le seul ennui c'est que mon index dans mon RadioButtonList a change entre temps sur la valeur que j'ai clique. Comment puis-je annule cela?

    Merci d'avance

    saphir54321

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 207
    Par défaut
    Il est toujours possible de mettre l'index de ton élément sélectionné dans un hiddenfield et lorsque tu appuie sur cancel remettre l'index au bon endroit.

    Le problème viens du fait que lorsque on selectedindexchanged se produit ton nouvel élément est déjà sélectionné il faut donc remettre la valeur précédente ce qui ne devrait pas être trop compliqué avec l'utilisation d'un hiddenfield.

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    Merci pour ta reponse stroumfs.

    Je ne vois pas trop comment faire ce que tu me proposes...
    Et ou est ce que je m'occupe de remettre la valeur precedente.

    Dans ce bout de code je suppose?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonRBL.Attributes.Add("OnChange", "if (confirm('Sure ?')) {" + Page.GetPostBackEventReference(((RadioButtonList)sender)) + ";}");

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 449
    Par défaut
    C'est du JavaScript, donc côté client, donc pas d'objet Page etc.

    Là, c'est plus du .NET, mais du JavaScript.

  5. #5
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    Hehe, je sais bien. C'est juste que javascript et moi ....
    Pourrais-tu me montrer comment faire?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 207
    Par défaut
    Hehe je comprend très bien ce que tu veux dire ne t'en fait pas.

    Pour en revenir à la suggestion que je te proposais, il faut premièrement ajouter dans ta page un asp hiddenfield

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <asp:HiddenField ID="HiddenFieldSelectedValue" runat="server" />
    <asp:RadioButtonList ID="RadioButtonList" runat="server"> </asp:RadioButtonList>
    Il suffit ensuite au chargement de ta page de mettre la valeur initiale dans ton hiddenfield:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void Page_Load(object sender, EventArgs e)
    {
     HiddenFieldSelectedIndex.Value = RadioButtonList.SelectedIndex;
    }
    Finalement dans ta page même sur le même événement que tu utilisais tu ajoutes ta fonction javascript:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function OnIndexChanged()
    {
      var hiddenfield = document.getElementById("<%= HiddenFieldSelectedIndex.ClientID %>");
      var radioButtonList = document.getElementById("<%= RadioButtonList.ClientID %>");
      if(!confirm(message))
      {
       radioButtonList.selectedIndex = hiddenfield .value;
      }
      hiddenfield.value = radioButtonList.selectedIndex;
    }
    Je ne suis pas certain à 100% de la méthode pour l'index de l'item côté client, mais pour le reste tout devrait fonctionner.

    J'espère que cela aura pu être utile .

    Je te souhaite une excellente journée!

  7. #7
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    Merci pour ta reponse.
    Cela me semble plus clair deja.
    Le seul probleme que j'ai oublie de preciser est que mon RadioButtonList se trouve dans un gridview. Comment dois-je faire pour y acceder?
    Ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("<%= HiddenFieldSelectedValue.ClientID %>")
    me donne comme erreur:
    The name 'HiddenFieldSelectedValue' does not exist in the current context
    Pareil pour le radiobuttonlist.

    J'ai ceci dans la fonction DataBound de mon RadioButtonList pour appeler la fonction OnIndexChanged si la reponse est negative.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((RadioButtonList)sender).Attributes.Add("OnChange", "if (confirm('Change a record, would you like to continue ?')) {" + Page.GetPostBackEventReference(((RadioButtonList)sender)) + ";}else{javascript:OnIndexChanged();}");
    Bonne journee a toi egalement.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 449

  9. #9
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    Merci bacelar.
    Entretemps j'ai trouve un autre moyen pour y acceder.
    En debuggant, j'ai lu le ClientId de mon control et l'ai lu ainsi dans ma fonction javascript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var hiddenfield = document.getElementById("ctl00_Main_GridView1_ctl02_HiddenFieldSelectedValue");
    En lisant la valeur qui se trouve dans hiddenfield avec document.write(hiddenfield.value); j'ai en effet lu la bonne valeur.
    J'ai ensuite assigne cette valeur a mon radiobuttonlist:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    radioButtonList.selectedIndex = hiddenfield.value;
    pour changer l'index, malheureusement l'index n'est pas change. Quand je lis la valeur de radioButtonList.selectedIndex avec document.write.... la valeur assignee par mon hiddenfield s'est fait correctement. Mais le resultat a l'ecran n'est pas correct.

    Any ideas???

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 449
    Par défaut
    Regardez mon lien, il permet de faire le calcul du ClientID de manière bien plus fiable.
    radioButtonList.selectedIndex doit être un int et hiddenfield.value une string, d'où vraisemblablement le problème.

  11. #11
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    J'ai converti hiddenfield.value en un int:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    radioButtonList.selectedIndex = parseInt(hiddenfield.value);
    mais cela n'a rien change.

  12. #12
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 449
    Par défaut
    Il faut peut-être prévenir le control sélectionné ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    radioButtonList.selectedIndex = parseInt(hiddenfield.value);
    radioButtonList[parseInt(hiddenfield.value)].selected=true;

  13. #13
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    J'ai essaye ceci comme propose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    radioButtonList[parseInt(hiddenfield.value)].selected=true;
    et ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    radioButtonList[parseInt(hiddenfield.value)].checked = true;
    mais cela ne change rien.
    J'ai mis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.write('hello');
    apres et cela ne l'a jamais affiche. Il y a clairement une erreur qui est produite par la ligne de code precedente.
    GGGRRRR, ouh que je n'aime pas javascript.....

  14. #14
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    Je suis finalement arrivee au bon resultat.
    Autant faire partager cela a tout le monde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById(rbl + '_' + index).checked = true;
    Merci de votre aide bacelar et stroumfs

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 449
    Par défaut
    Activez le debugging Javascript pour utiliser VS comme débuggeur Javascript.
    C'est dans les options internet d'IE. (Même avec FireFox).

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

Discussions similaires

  1. [C#] Datagrid et SelectedIndexChanged de DropDownList
    Par Raduris dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/10/2006, 15h10
  2. [C#] Forcer le selectedIndexChange sur dropdownlist
    Par bl4ckwolf dans le forum ASP.NET
    Réponses: 2
    Dernier message: 07/06/2006, 14h22
  3. Réponses: 3
    Dernier message: 06/12/2005, 13h44
  4. [C#] RadioButtonList
    Par BiM dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/05/2005, 16h00
  5. [C#] Probleme avec DropDownList et SelectedIndexChange
    Par Oberown dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/02/2005, 10h35

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