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 :

Compter le nombre d'éléments d'un tableau


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut Compter le nombre d'éléments d'un tableau
    ReBonjour tout le monde !

    Petite question, j'ai un tableau sur une page aspx qui ne contient que les balises <table></table>. Je lui ai bien mis un id et un runat server.

    Les lignes et les colonnes sont rajoutés dynamiquement selon les données que je chope en base de données.

    Le tableau s'affiche niquel avec toutes les colonnes et ligne. Le seul hic intervient quand je veux faire un Count de mes lignes ou de mes cellules.

    Je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int row = this.Tableau.Rows.Count;
    Et là il me retourne 0 lignes... Et pourtant, les lignes sont bien là :/, en visu sur ma page.

    Cela viendrait-t'il du fait que les cellules et lignes sont rajoutées dynamiquement et qu'il fait le count sur la page statique ? Si c'est le cas et bien je suis bloqué car je ne peux me permettre de les ajouter en dur dans mon aspx.

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Question bête mais néanmoins nécessaire : les lignes sont-elles déjà ajoutées quand tu fais ton test ?
    Peut-on voir le code ?

  3. #3
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Oui bien entendu elles sont ajoutées.

    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
     
    HtmlTableRow row = new HtmlTableRow();
            HtmlTableCell cellName = new HtmlTableCell();
     
     
            cellName.InnerText = name;
     
     
     
     
            row.Cells.Add(cellName);
     
            int idNumber = 1;
            if (this._List != null)
            {
                foreach (Person pers in this._List)
                {
                    TextBox textbox = new TextBox();
                    HtmlTableCell cellTextbox = new HtmlTableCell();
     
     
                    cellTextbox.Align = "left";
                    textbox.ID = string.Format("TextboxMask{0}", idNumber);
                    textbox.CssClass = "textbox";
                    textbox.Width = 60;
     
                    cellTextbox.Controls.Add(textbox);
                    row.Cells.Add(cellTextbox);
     
                    idNumber++;
                }
            }
     
            table.Rows.Add(row);

    Donc les lignes sont bien ajoutées au chargement de la page, et je déclenche le comptage de lignes sur le clic d'un bouton.

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Si tu testes table.Rows.Count, tu auras forcément la bonne valeur.
    Par contre, comment se fait le lien entre this.Tableau (sur lequel tu fais ton test) et table (sur lequel tu ajoutes les lignes) ? Ces deux objets représentent-ils la même instance ?

  5. #5
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Citation Envoyé par BCmDev Voir le message
    Si tu testes table.Rows.Count, tu auras forcément la bonne valeur.
    Par contre, comment se fait le lien entre this.Tableau (sur lequel tu fais ton test) et table (sur lequel tu ajoutes les lignes) ? Ces deux objets représentent-ils la même instance ?
    Oui excuse moi je n'ai pas mis le début de la méthode, c'est bien la même instance.

    Et mon rows.count me retourne 0 !

    Bon aussi je suis pas clair :

    Je remplis mon tableau par une méthode --> nikel, donc oui dans cette méthode je peux retrouver le nombre de lignes.

    tableau chargé, tout s'affiche nikel.

    Ensuite, quand je clique sur mon bouton, hop, il trouve que mon tableau n'a plus de lignes...

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Citation Envoyé par Ishizaki Voir le message
    Ensuite, quand je clique sur mon bouton, hop, il trouve que mon tableau n'a plus de lignes...
    Nous y voilà... Le vrai problème est donc que le nombre de lignes est à zéro après un PostBack ! Ton tableau, est-il créé même sur un PostBack ? Si non (ce que je crains fortement), tu dois appeler ta méthode de création dans tous les cas !

  7. #7
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Ouaip tout a fait... Mais l'autre souci est que mon tableau se met à jour dynamiquement selon une dropdownlist. En gros, le nombre de colonnes et leur intitulé change selon l'item choisi dans la dropdownlist.

    Ensuite, pour chaque personne, une textbox est présente dans la colonne.

    En gros:

    Nom Prénom Intitulé1 Intitulé2
    John Carpenter Textbox Textbox


    etc...

    Ensuite, on remplit les textbox, et quand je clique sur mon bouton, je veux récupérer les infos des textbox(en gros récupérer toutes les infos dans un tableau de string).

    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
     
     private string[,] ArrayRecord()
        {
            int rowCount = this.TablePerson.Rows.Count;//Et là 0 lignes !
            int cellCount = this.TablePerson.Rows[0].Cells.Count;
     
            //this._CellCount = cellCount;
            //this._RowCount = rowCount;
     
            string[,] array = new string[rowCount,cellCount];
     
     
            if(rowCount > 0)
            {
                //Parcours des lignes
                for (int indexRow = 0; indexRow <= rowCount-1; indexRow++)
                {  
                    //Parcours des cellules
                    for (int indexCell = 0; indexCell <= cellCount - 1; indexCell++)
                    {
                        array[indexRow, indexCell] = this.TablePerson.Rows[indexRow].Cells[indexCell].ToString();
                    }
                }
            }
     
            return array;
        }
    En gros je peux pas gérer le Postback parceque mon tableau peut être remodifier par sélection dans ma dropdownlist.

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Citation Envoyé par Ishizaki Voir le message
    En gros je peux pas gérer le Postback parceque mon tableau peut être remodifier par sélection dans ma dropdownlist.
    Je n'y vois aucune impossibilité. Si tu sais créer le tableau une fois, alors tu sais le refaire sur un PostBack. Si la création du tableau est fonction de la valeur sélectionnée dans la DropDownList, cette valeur est toujours à disposition.

  9. #9
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Oublié de dire que mon tableau se trouve dans un update panel. En même temps, j'ai un AutoPostBack sur ma dropdownlist donc oui ça pourrait faire l'affaire.

    Jvais voir.

    Edit: Bon j'y arrive pas, je vois pas comment on peut faire pour conserver le tableau... Jpige pas, je fous bien la création du tableau dans un PostBack à false, mais il ne me le conserve pas du tout lors du clic sur le bouton.

    Et je peux pas le faire avec un ViewState vu que les HtmlTable ne sont pas serializables...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     if (this.IsPostBack == false)
                {
                    foreach (Person person in this._ListPerson)
                    {
                        this.SetArrayRow(person.Name, person.Surname, , this.TablePerson);
     
                    }
                }

  10. #10
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Bon et bien j'ai une demi solution : Par Session... Je conserve bien la bonne structure du tableau, mais les données... Walou.

    Ca marcheuuuuu ^^. Quel benêt, j'avais mis Rows.Cells.ToString() au lieu de Rows.Cells.InnerText.

    Merci pour ton aide en tout cas !!

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Tu dois retirer la condition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (this.IsPostBack == false)
    et construire le tableau dans tous les cas.

  12. #12
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Bon en fait je ne marque pas le sujet comme résolu, car il y a une subtilité qui m'empêche de faire ce pour quoi le tableau a été fait : l'enregistrement.

    En gros:

    J'affiche mon tableau, je le conserve dans une variable de session.
    Lors de l'enregistrement, je récupère mon tableau de la variable de session, mais hic ! Dans mes textbox, le texte que j'ai entré n'est plus conservé car c'est le texte des textbox du tableau conservé en session qui sont retournées, donc des textbox vides...

    Meme si je repasse par la recréation du tableau ca ne sert à rien puisque mes données ne seront pas conservées...

  13. #13
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    montres ton code

  14. #14
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Ouaip, il est vrai que je n'ai pas montré cette partie du 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
     
     
    //Dans le OnPreRender, j'assigne ma table à ma propriété.
     protected override void OnPreRender(EventArgs e)
        {
            this.ArrayTable = this.TablePerson;
     
            base.OnPreRender(e);
        }
     
    //La propriété stocke la table dans une variable de session
    public HtmlTable ArrayTable
        {
            get
            {
                return this.Session["TablePerson"] as HtmlTable;
            }
            set
            {
                this.Session["TablePerson"] = value;
            }
        }
     
        private HtmlTable _ArrayTable = new HtmlTable();
     
    3) Lors du clic sur un bouton, ici "Enregistrer", je récupère le tableau de ma variable de session:
     
    private string[,] ArrayRecord()
        {
            int rowCount = (int)this.RowCount;//Nombre de lignes
            int cellCount = (int)(this.CellCount);//Nombre de colonnes
     
     
            string[,] array = new string[rowCount,cellCount];
     
     
     
            if(rowCount > 0)
            {
                for (int indexRow = 0; indexRow <= rowCount-1; indexRow++)
                {
                    for (int indexCell = 0; indexCell <= cellCount - 1; indexCell++)
                    {
                        if (indexCell > 1)//Le nom et le prénom sont deja fixés, ce ne sont pas des textbox, les cellules d'index supérieur ne contiennent que des Textbox
                        {
                            array[indexRow, indexCell] = ((TextBox)this.ArrayTable.Rows[indexRow].Cells[indexCell].Controls[0]).Text;//Textbox
                        }
                        else
                        {
                            array[indexRow, indexCell] = this.ArrayTable.Rows[indexRow].Cells[indexCell].InnerText;//Texte normal
                        }
                    }
                }
            }
     
            return array;
        }

  15. #15
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    désolé mais je ne comprends pas trop ton problème

  16. #16
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    peux tu l'expliquer clairement s'il te plait ?

  17. #17
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    ^^, je comprends, en meme temps il est tordu.

    Explication:

    1) J'affiche mon tableau (dynamiquement selon un choix effectué dans une dropdownlist). Les colonnes et cellules sont donc affichées dynamiquement. J'utilise HtmlTable, HtmlTableCell et HtmlTableRow.

    2)A la fin de cet affichage, dans le OnPrenrender, je récupère le tableau ainsi créé dans une propriété qui va le stocker dans une variable de session. En effet, lors du clic sur le bouton "Enregistrer" de ma page, mon tableau, dont les balises <table></table> sont situées sur la page aspx avec les attributs "id" et "runat="server"", je ne récupère que ce tableau, sans colonnes ni lignes ! Création dynamique oblige. Donc --> conservation en session.

    3) Je clique donc sur le bouton "Enregistrer", après avoir entrer du texte dans une des textbox de mon tableau. MAIS, lors de ma procédure de récuperation du tableau dans un tableau de string, je tape dans le tableau conservé en session et NON CELUI qui contient les nouvelles données (par nouvelles données je veux dire le texte entré dans une des textbox). Et donc zéro données mises à jour.

    J'espère avoir été plus clair ^^.

  18. #18
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    ben tu retournes un tableau par ta méthode ArrayRecord() mais ton objet array , il faut l'enregistrer en base de données.
    Et c'est quoi ces gens qui utilises des arrays au lieu d'utiliser des objets ? ^^

  19. #19
    Membre habitué Avatar de Ishizaki
    Inscrit en
    Avril 2006
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 262
    Points : 175
    Points
    175
    Par défaut
    Heu là c'est moi qui suis perdu, je ne comprends pas ce que tu veux dire...

  20. #20
    Membre actif Avatar de gwadakillah
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    235
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2005
    Messages : 235
    Points : 239
    Points
    239
    Par défaut
    c'est bien ta méthode ArrayRecord qui ne fait pas ce que tu veux?

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

Discussions similaires

  1. [XL-2010] compter le nombre d'éléments spécifiés dans un tableau multidimensionnel
    Par will-1981 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/07/2014, 17h57
  2. [PHP 5.3] compter nombre d'éléments dans un tableau
    Par Loubard21 dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2010, 16h12
  3. [Tableaux] Compter le nombre d'éléments d'un tableau
    Par philippef dans le forum Langage
    Réponses: 1
    Dernier message: 25/11/2008, 12h50
  4. Nombre d'élément d'un tableau
    Par barok dans le forum Flash
    Réponses: 3
    Dernier message: 10/10/2005, 20h02
  5. Compter le nombre d'élément dans un tableau
    Par cryptorchild dans le forum Langage
    Réponses: 6
    Dernier message: 08/07/2005, 13h01

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