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 :

CheckBox dans GridView


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut CheckBox dans GridView
    Bonjour les amis,
    J'ai un petit problème mais qui me bloque,
    Dans un projet ASP.NET(c#), j'ai crée un gridview dans lequel chaque ligne contient un checkBox avec "Autopostback='true'".
    Au moment q'on coche un checkbox dans une ligne, un traitement spécifique est lancé côté serveur et tous les autres checkbox se désactive. pour pouvoir cocher un autre checkbox (autrement dit pour choisir une autre ligne), il faut décocher le premier pour que les autres checkbox s'activent.
    Mon programme marche très bien (répond logiquement à la condition suivante : une seule case à cocher doit être coché).
    Pourtant pratiquement c'est pas forcément le cas, parceque entre l'appuie sur une case à cocher et l'application du traitement côté serveur, il y a un lapse de temps (réponse du serveur) ou je peut cocher plusieurs checkbox!!!
    Avez vous une solution pour parez ce problème là?
    Merci d'avance!!

  2. #2
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Citation Envoyé par le_misterioso Voir le message
    Bonjour les amis,
    J'ai un petit problème mais qui me bloque,
    On va en parler, ça ira mieux après

    Citation Envoyé par le_misterioso Voir le message
    Dans un projet ASP.NET(c#), j'ai crée un gridview dans lequel chaque ligne contient un checkBox avec "Autopostback='true'".
    Au moment q'on coche un checkbox dans une ligne, un traitement spécifique est lancé côté serveur et tous les autres checkbox se désactive. pour pouvoir cocher un autre checkbox (autrement dit pour choisir une autre ligne), il faut décocher le premier pour que les autres checkbox s'activent.
    Mon programme marche très bien (répond logiquement à la condition suivante : une seule case à cocher doit être coché).
    Pourtant pratiquement c'est pas forcément le cas, parceque entre l'appuie sur une case à cocher et l'application du traitement côté serveur, il y a un lapse de temps (réponse du serveur) ou je peut cocher plusieurs checkbox!!!
    Avez vous une solution pour parez ce problème là?
    Merci d'avance!!
    Alors, première chose, il faudrait que tu postes un peu de code pour que nous voyions ce dont il est question.
    Il est en effet étonnant que la mise à jour d'une GridView soit aussi longue que tu le décris. Il y a donc probablement des optimisations à faire dans ton code.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Merci d'abord Calagan pour ta réponse.
    mon code est le suivant :

    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
    32
    33
    34
     
    protected void ChkBox_CheckedChangedDec(object sender, EventArgs e)
        {
            try
            {
                CheckBox checkbox = (CheckBox)sender;
                GridViewRow row = (GridViewRow)checkbox.NamingContainer;
                ImageButton ibtn = (ImageButton)row.FindControl("ibtnSelect");
     
                if (checkbox.Checked)
                {
                    for (int i = 0; i < gvDeclarants.Rows.Count; i++)
                    {
                        CheckBox cbSelection = (CheckBox)gvDeclarants.Rows[i].FindControl("chkBoxDec");
                        if (cbSelection != checkbox)
                        {
                            cbSelection.Enabled = false;
                        }
                    }
                }
    else{
        for (int i = 0; i < gvDeclarants.Rows.Count; i++)
                    {
                        CheckBox cbSelection = (CheckBox)gvDeclarants.Rows[i].FindControl("chkBoxDec");
                        if (cbSelection != checkbox)
                        {
                            cbSelection.Enabled = true;
                        }
                    }
    }
    .....
    ....
    ....
    ....
    Merci d'avance !

  4. #4
    Modérateur

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2007
    Messages
    1 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 996
    Par défaut
    Bizarre, rien d'anormal dans ton code.
    Ta grid comporte combien d'item ? Si tu en as beaucoup, sans pagination, ton problème pourrait venir de là.

    Ta grid est-elle dans un UpdatePanel ?

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Je crois que j'ai l'idée de la solution, j'utiliserai du javascript pour que le check/uncheck se fait côté client et non pas coté serveur.
    Donc je réexplique : comment je peux utiliser javascript pour que si je coche une case n'import laquelle dans un datagrid la case en question reste activée alors que les autres cases à cocher se désactive, et vice versa, comment lorsque je décoche une cas à cocher, cette case reste activée et les autres cases s'active aussi (enabled=true).
    Merci d'avance les amis !

    Autrement dit, je n'ai le droit de cocher qu'une seule case. Je crois que ce traitement se fera rapidement, n'est-ce pas?

  6. #6
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    la solution la plus simple est d'utiliser jquery, ca donnera un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $(':checkbox').each(function(){
      if(!$(this).is('checked'))
          $(this).attr('disabled', 'disabled');
    });
    sinon tu le fait en en parcourrant en dom ce qui donnera un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var inputs = document.getElementsByTagName('input');
    for(var i = 0 ; i<  inputs.length; i++)
    {
       if(inputs[i].type=="checkbox" && !inputs[i].checked)
       {
          inputs[i].disabled = 'disabled';
       }
    }
    Du moins c'est ce que je crois

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    merci g_tarik0010 mais comment je peux lier ce code script au click du checkbox contenu dans le gridview; sachant que mon code aspx ressemble à ceci :

    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:GridView ID="gvDeclarants" runat="server"  AutoGenerateColumns="False" CellPadding="4"
                    ForeColor="#333333" GridLines="None" Width="500px" Font-Names="Verdana" Font-Size="XX-Small"
                    OnRowDataBound="gvDeclarants_RowDataBound">
     
    ...
    ...
    ...
    ...
     
    asp:TemplateField HeaderText="DEC">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkBoxDec" runat="server" Checked='<%# Bind("Declarant") %>'/>
                            </ItemTemplate>
                        </asp:TemplateField>
    j'ajouterai aussi que le "onclick" ne se trouve pas dans le controle checkbox

    Edit
    Pour localiser mon problème, j'ai essayé d'affecter une simple fonction javascript (qui affiche un message d'erreur) au moment ou je coche un checkbox d'un gridview, mais en vain. Comment je lie ma fonction javascript avec le <asp:checkbox, j'ai trouvé dans le net je doit utiliser l'attribut "onclick" du checkbox, mais cet attribut n'existe pas !!!!!
    Merci les amis et bonne année !

  8. #8
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    Essaie avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:CheckBox runat="server" ID="test" onclick="javascript:alert(this.checked);" />

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    ca marche pas!!!!

    "onclick" n'existe pas dans "chechbox" comme c'est le cas de "ID" et "runat" !!
    Veuillez m'éclairer mes amis SVP...
    Merci d'avance les amis !

  10. #10
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    Ca n'existe pas dans les attributs de L'intellisence, cependant quand tu la met ca se crée coté client

    NB : respecter la casse ==> onclick

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    D'accord, merci tarik, j'ai essayé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <asp:TemplateField HeaderText="test">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkBoxDec" runat="server" Checked='<%# Bind("Declarant") %>' onclick="javascript:alert(this.checked);"/>                            
                            </ItemTemplate>
                        </asp:TemplateField>
    ca a marché, mais lorsque je crée une fonction javascript comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <script type="text/javascript" language="javascript">
    function enableDisable(chk)
    {
               return alert(chk.checked);            
    }
    </script>
    avec le code du checkbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <asp:TemplateField HeaderText="test">
                            <ItemTemplate>
                                <asp:CheckBox ID="chkBoxDec" runat="server" Checked='<%# Bind("Declarant") %>' onclick="javascript:enableDisable(this);"/>                            
                            </ItemTemplate>
                        </asp:TemplateField>
    ca me donne pas le message alert !!!!!
    Veuillez m'éclairez SVP !!
    Merci d'avance

  12. #12
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    la fonction alert ne retourne pas de valeur (c'est une void)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function enableDisable(chk)
    {
    alert(chk.checked); 
    return true;
    }

  13. #13
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    J'ai trouvé le problème, on fait j'ai plusieurs imbrications :
    des updatepanel>panel>Wizard> ....
    j'ai posé le code script dans la page racine.

    Une autre question qui se pose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:CheckBox ID="chkBoxDec" runat="server" Checked='<%# Bind("Declarant") %>' onclick="enableDisable(xxx,this);"/>
    dans le code ci-dessus, le mot "this" référence le controle "CheckBox", qu'est-ce que je peux mettre dans "xxx" pour référencer le "ClientId" du gridView?? comment ca au lieu d'utiliser la variable suivante dans le code du script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var GridView = document.getElementById('<%=gvDeclarants.ClientID %>');
    où, mon programme ne connait pas le "gvDeclarants" à cause des imbrications, je peux le transmettre en argument.

    Merci infiniment !!

  14. #14
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    Tu peux faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:CheckBox ID="chkBoxDec" runat="server" Checked='<%# Bind("Declarant") %>' onclick="enableDisable('<%=gvDeclarants.ClientID %>',this);"/>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function enableDisable(gridId, chkobj)
    {
     
    alert(chk.checked); 
    return true;
    }

  15. #15
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    merci d'abord pour votre intéraction mon frère (you have my brother's first name )
    Logiquement, ça parait bon, mais après test, ça n'a rien donné !!!
    t'as une suggestion ??

    j'ai essayé d'afficher la variable "gridId" comme message dans "alert", et ca me donne ceci :
    <%=gvDeclarant.ClientID %>
    donc dans : enableDisable('<%=gvDeclarant.ClientID %>',this), la variable est prise en dure !!!!!

  16. #16
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    tu peux essayer de déclarer une variable javascript global dans ta page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      <script>
         var GridId ='<%=gvDeclarant.ClientID %>';
      </script>
    et dans ton code mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <asp:CheckBox ID="chkBoxDec" runat="server" Checked='<%# Bind("Declarant") %>' onclick="javascript:enableDisable(GridId ,this);"/>

  17. #17
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Bonne idée Tarik, mais la question dans quelle page et comment mettre ce script.
    Je sais pas si je peux expliquer d'avantage mon problème :
    En fait, ma gridview se trouve dans une page x1.aspx (sans tags <html>, <head>, <body>, .....), et mon code javascript se trouve dans une autre page x2.aspx (qui contient les balises <html>, <head>,<body>, ...).
    Comme j'ai dit avant, la page x1.aspx est interpelé d'une manière ou d'une autre via des controles (updatecontrol, usercontrol, ...) dans la page x2.aspx.
    Quand je place mon code javascript dans ma page x1.aspx ca se prend meme pas en compte (sinon ca aurait résolu mon problème), mais lorsque je le place dans la page x2.aspx ca marche (puisque c'est la page racine), mais le problème c'est que j'arrive pas à référencer l'ID de mon gridview dans le script de la page x2.aspx.
    Merci encore tarik pour votre intéraction, et j'espère qu'on trouvera la solution.

    edit
    Bizarre, je peux récupérer l'id du checkbox via "this", normalement il doit y avoir un truc pour récupérer l'id du gridview

  18. #18
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    Regarde un peu cet article ICI
    c'est un truc pour garder tes scripts javascript audela d'un postback d'updatePanel :

    Quand je dit que G
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script>
         var GridId ='<%=gvDeclarant.ClientID %>'; //GridId est une variable javascript global;
      </script>
    Pour en savoir plus sur la portée (visibilité) des variables en javascript un coup de Google serait utile

  19. #19
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    On parle, de javascript dans updatepanel ...
    mais j'ai pas compris comment le résoudre ???

  20. #20
    Membre expérimenté Avatar de g_tarik0010
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 186
    Par défaut
    c'est un truc pour garder tes scripts javascript audela d'un postback d'updatePanel : ICI

    Pour résumer l'article : il te dit qu'un update panel ne garde pas les scripts inline lors d'un postback et il te propose de créer un Custom Control qui va contenir ton script inline ce qui veut dire que tu pourrais y acceder meme apres un postback

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. checkbox dans gridview
    Par marie-anne dans le forum VB.NET
    Réponses: 2
    Dernier message: 29/11/2010, 12h51
  2. CheckBox dans Gridview que je retrouve vide
    Par Michelk12 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/09/2010, 15h52
  3. problème checkbox dans gridview
    Par math33 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 11/05/2010, 15h14
  4. Checkbox dans gridview (coché ou non en load)
    Par Tidus159 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 28/05/2008, 14h07
  5. Réponses: 7
    Dernier message: 07/11/2006, 16h23

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