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 :

[ASP.NET-C#]Impossible de lire la valeur d'un checkBox créé dynamiquement


Sujet :

ASP.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Points : 64
    Points
    64
    Par défaut [ASP.NET-C#]Impossible de lire la valeur d'un checkBox créé dynamiquement
    Bonjour,
    Voici mon problème:
    A partir d'une source XML je remplis un tableau (tabLogin) dynamiquement en y ajoutant un control CheckBox. De cette manière, toutes les lignes du tableau qui ont été cochées sont traitées après avoir fait un click sur le bouton 'btnEnvoyer'.
    Voici mon code:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    TableRow tr = new TableRow();
    System.Web.UI.WebControls.CheckBox ch;
    TableRow tRow;
     
        protected void Page_Load(object sender, EventArgs e)
        {
            DataXML._rootPath = HttpContext.Current.Server.MapPath("~\\App_Data\\");
            XPathNodeIterator monIter = DataXML.SearchXmlByIterator("//membre[Actif='Oui']", "XMLMembres.xml");
            for (int i = 0; i < monIter.Count; i++)
            {
                monIter.MoveNext();
                tRow = new TableRow();
                tabLogin.Rows.Add(tRow);
                for (int j = 1; j < 7; j++)
                {
                    TableCell tCell = new TableCell();
                    if (j == 1)
                    {
                        monIter.Current.MoveToAttribute("Id", "");
                        tCell.Text = monIter.Current.Value;
                        monIter.Current.MoveToParent();
                    }
                    if (j == 2)
                    {
                        tCell.Text = monIter.Current.SelectSingleNode("./Nom").Value;
                     }
                    if (j == 3)
                    {
                        tCell.Text = monIter.Current.SelectSingleNode("./Prénom").Value;
                     }
                    if (j == 4)
                    {
                        tCell.Text = monIter.Current.SelectSingleNode("./Courriel").Value;
                     }
                    if (j == 5)
                    {
                        tCell.Text = monIter.Current.SelectSingleNode("./MotDePasse").Value;
                    }
                    if (j == 6)
                    {
                         // Créé un Checkbox Web control l'ajouter à la cellule.
                        ch = new CheckBox();
                        ch.ID = "checkBox_" + i.ToString();
                        tCell.Controls.Add(ch);
                        ch.Checked = false;
                    }
                    tRow.Cells.Add(tCell);
                }
            }
        }
    //Bouton 'Envoyer'
    protected void btnEnvoyer_Click(object sender, EventArgs e)
        {
            int iNombre = tabLogin.Rows.Count;
            for (int i = 0; i < iNombre; i++)
            {
                if (i != 0)
                {
                    if (tabLogin.Rows[i].Cells[5].Text == "true") 
                    {
                         //TODO: Méthode pour traiter les lignes cochées
                     }
                 }
            }
        }
    Seulement voilà, impossible de déterminer si un checkBox a été coché ou non.
    Pourtant la lecture du tableau se fait quand même côté client ! Comment atteindre le checkBox installé dans la cellule ?

  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
    Points : 3 106
    Points
    3 106
    Par défaut
    Ta checkbox est créée dans le PageLoad.
    Par conséquent, à chaque Postback, elle est recrée est décochée puisque tu fais :
    Regarde du côté de IsPostBack

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Points : 64
    Points
    64
    Par défaut
    Merci pour ta réponse calagan99. J'ai supprimé le mais cela ne change rien.
    Quant à PostBack, je ne comprends ce qu'il vient faire ici. Ce n'est quand même pas en cliquant sur un checkBox que ma page est recréée ...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 502
    Points
    1 502
    Par défaut
    Ce n'est quand même pas en cliquant sur un checkBox que ma page est recréée
    Si, car il y a un postback lorsque tu coche la checkbox, dans tous les cas, vu que tu créer tes données dans le page_load, lors d'un postback tu aura tes données d'origine.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ch = new CheckBox();
    ch.ID = "checkBox_" + i.ToString();
    tCell.Controls.Add(ch);
    ch.Checked = false;
    Pourquoi ne pas utiliser un repeater, et faire le dataBind lors du page-preRender ?

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2003
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2003
    Messages : 108
    Points : 129
    Points
    129
    Par défaut
    le postback n'est pas en cause...
    c'est ta méthode envoyer
    déjà je comprends pas pourquoi tu mets
    if (i != 0)
    sachant que quand tu crée les rows tu démarre bien de 0...
    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (tabLogin.Rows[i].Cells[5].Text == "true")
    ca sert à quoi???
    a savoir que ton checkbox est un controle ajouté à ton objet tCell...
    et pourquoi 5??
    ajoute des espions en mode debug et regarde ce que tu cherches à faire

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Points : 64
    Points
    64
    Par défaut
    La première ligne de mon tableau contient les headerText. C'est pourquoi, j'évite de passer par la row '0'. Quant au '5', il s'agit de la cinquième cellule de la row qui contient le checkbox. Je vais aller voir du côté du repeater, control que je ne connais pas.

  7. #7
    Membre habitué
    Inscrit en
    Décembre 2003
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2003
    Messages : 108
    Points : 129
    Points
    129
    Par défaut
    oui effectivement, tente les controles du genre repeater, gridview,listview...
    travailler avec les Table en asp.net ca devient vite la galère

Discussions similaires

  1. [SQL Server 2008 & ASP.NET] Connexion impossible à la base de données
    Par stringman62 dans le forum Accès aux données
    Réponses: 0
    Dernier message: 22/04/2010, 14h38
  2. Réponses: 8
    Dernier message: 30/11/2009, 18h29
  3. Réponses: 3
    Dernier message: 26/11/2009, 13h34
  4. Réponses: 5
    Dernier message: 29/02/2008, 16h40
  5. Réponses: 2
    Dernier message: 25/06/2007, 07h18

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