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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 42
    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 : 42
    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 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

  8. #8
    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 ???

  9. #9
    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

  10. #10
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Je suis vraiment dans la cata
    J'ai essayé le truc dans le lien que tu m'a donné :
    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
     
    public class InlineScript : Control {
     
    protected override void Render(HtmlTextWriter writer) {
     
    ScriptManager sm = ScriptManager.GetCurrent(Page);
     
    if (sm.IsInAsyncPostBack) {
     
    StringBuilder sb = new StringBuilder();
     
    base.Render(new HtmlTextWriter(new StringWriter(sb)));
     
    string script = sb.ToString();
     
    ScriptManager.RegisterStartupScript(this, typeof(InlineScript), UniqueID, script, false);
     
    }
     
    else {
     
    base.Render(writer);
     
    }
     
    }
     
    }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <i88:InlineScript runat="server">
     
    <script type="text/javascript">
     
    alert('hi');
     
    </script>
     
    </i88:InlineScript>
    mais ca n'a pas marché !!!!

  11. #11
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 121
    Par défaut
    Cela parait un peu compliqué, d'autant plus que Internet Explorer a une alérgie des javascript; en fait j'ai pu me trouver une solution autrement:
    puisque j'utilise le controle "WIzard" j'ai controle "controle vlidate" qui me vérifi si une seule case est coché ou non lors de l'appuie sur le bouton suivant.
    Merci à vous tous !!

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

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