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 :

Remplir un tableau


Sujet :

ASP.NET

  1. #1
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut Remplir un tableau
    Bonjour tout le monde,

    Je suis sur que la question a déjà été postée, mais je n'ai pas trouver de réponse pouvant m'aider.

    J'explique mon problème,

    J'ai 3 valeurs (Piece, Motif, quantité) que je récupère dans un label espacés de "|"

    Pour récupérer ces données, je split directement les valeurs entre "|".

    Je voudrais mettre ces valeurs dans un tableau.

    Quelle serait, selon vous la meilleure façon de le faire ?

    Un tableau html ?
    Un gridview ? (possible de d'utiliser ce procédé dans ce cas ?)
    Autre ?

    Je voudrais faire un truc du genre

    For i=0 to P.length
    Colonne1=p(i)
    Colonne2=m(i)
    Colonne3=q(i)
    Next

    Merci d'avance à tout le monde.

  2. #2
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    Tu as 3 valeurs simplement ou t'as un label contenant 3 tableaux de valeurs?
    Pourquoi n'utilises-tu pas 3 labels differents?
    Peut-on avoir ton code où tu déclares ton label s'il te plait?

  3. #3
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut
    Bonjour et merci pour ta réponse.

    J'ai effectivement 3 labels, à partir de ceux ci, je récupère 3 listes de valeurs.

    J'ai donc bien toutes les valeurs que je souhaite, mon soucis maintenant est de mettre cela en forme dans un tableau.

    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
    If ajout_piece.Text = " " Then
                ajout_piece.Text = "|" + Session.Item("piece")
                ajout_piece.Text = ajout_piece.Text.Trim()
     
            Else
                ajout_piece.Text = Session.Item("piece")
            End If
     
            If quantite_nc.Text.Contains("") Then
                quantite_nc.Text = "|" + Session.Item("quantite")
                'quantite_nc.Text = quantite_nc.Text.Trim()
            Else
                quantite_nc.Text = Session.Item("quantite")
            End If
            If motifs_nc.Text.Contains("") Then
                motifs_nc.Text = "|" + Session.Item("defaut_piece")
                motifs_nc.Text = motifs_nc.Text.Trim()
            Else
                motifs_nc.Text = Session.Item("defaut_piece")
            End If

  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
    Euh, créer un tableau HTM a la mano n'est pas forcément très clean.
    Ou tu crées un objet Piece (avec trois membres : piece, quantite, motif).
    Tu crées alors une List<Piece> que tu affectes à un gridview.

    Ou tu crées un DataTable avec trois DataColumns (Piece, Quantite, Motif).
    Tu crées alors autant de DataRows que d'éléments dans ta liste et affecte le DataTable à un gridview.

  5. #5
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    Je sais pas si je cerne ton problème, mais apparement t'en as pas pour l'instant, c'est sa? Ben essaye dans un tableau en vb.net ou en html ou gridview c'est toi qui décide!
    Maintenant si tu te heurtes à des problèmes, on se fera un plaisir de t'aider!!

  6. #6
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut
    Merci beaucoup, je vais déjà creuser avec les infos que vous m'avez donné.

    (ben oui, vous allez pas faire le boulot à ma place quand même !)

    Merci beaucoup, je reviendrais vers vous, si j'ai trouvé (ou si je n'ai pas trouvé) !

    Bye

  7. #7
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    (ben oui, vous allez pas faire le boulot à ma place quand même !)
    Aide-toi et le ... forum t'aidera

  8. #8
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut
    Bon, j'ai essaye de me frotter aux DataTable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Dim dt As DataTable = New DataTable()
                Dim cl_piece As DataColumn = New DataColumn()
                Dim cl_motifs As DataColumn = New DataColumn()
                Dim cl_quantite As DataColumn = New DataColumn()
                Dim dr As DataRow
                Dim k As Integer
                For k = 0 To p.Length
     
     
                Next
    J'ai essayé pas mal de choses, qui se sont toutes avérées fausses.

    Du coup, je pense avoir cette partie de code bonne, le reste, j'ai jeté.

    Pour info, voilà comment je récupère mes données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Dim p() As String 'piece
         Dim m() As String 'motif
         Dim q() As String 'quantité
         Dim j As Integer
     
         p = ajout_piece.Text.Split("|")
         m = motifs_nc.Text.Split("|")
         q = quantite_nc.Text.Split("|")
    Une ligne doit faire PIECE MOTIF QUANTITE à la suite.
    Mais là, je vois pas du tout comment faire.

    (à noter que je débute )

    Merci d'avance.

  9. #9
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut
    Bonjour tout le monde,

    Bon, j'ai creuser un peu, j'ai finalement trouver un petit tuto sur le net.

    Tout va bien, sauf cette parte de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       Private Function AddDataToTable(ByVal piece As String, ByVal motif As String, ByVal quantite As String, ByVal myTable As DataTable) As DataTable
     
            Dim row As DataRow
            row = myTable.NewRow()
            row("piece") = piece
            row("motif") = motif
            row("quantite") = quantite
     
            myTable.Rows.Add(row)
            Return myTable
        End Function
    J'ai un message d'erreur suivant :
    La référence d'objet n'est pas définie à une instance d'un objet.
    Sur la ligne
    Quelqu'un a t-il une idée ?

    Merci, et bonne journée !

  10. #10
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut
    Désolé pour les doubles posts, j'ai trouvé comment résoudre mon problème précédent.

    Je sèche maintenant sur un autre soucis.

    J'arrive à ajouter des lignes sur ma datatable par le biais d'un bouton :

    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
      Protected Sub btn_recap_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_recap.Click
     
            Dim i As Integer
            Dim piece() As String 'piece
            Dim motif() As String 'motif
            Dim qte() As String 'quantité
     
     
            piece = ajout_piece.Text.Split("|")
            motif = motifs_nc.Text.Split("|")
            qte = quantite_nc.Text.Split("|")
            For i = 0 To piece.Count()
                AddDataToTable(piece(i).ToString, "motif", "qte", CType(Session("myDataTable"), DataTable))
                Me.GridView1.DataSource = CType(Session("myDatatable"), DataTable).DefaultView
                Me.GridView1.DataBind()
            Next
     
        End Sub
    Mais j'obtiens un message d'erreur quand j'essaye d'ajouter cela :
    System.IndexOutOfRangeException: L'index se trouve en dehors des limites du tableau.

  11. #11
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    Désolé pour le temp de silence jakichan007645, ce genre d'érreur signifie que t'as dépassé la taille du tableau, éssaies un peu (je sais pas trop) avec i -1

  12. #12
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut
    SonnyFab,

    J'avais trouver, effectivement, c'était bien cela, mais merci quand même.

    J'arrive maintenant à avoir mon tableau ! Bientôt la fin.

    J'ai un dernier soucis, voici mon tableau de base :



    Je ne comprend pas pourquoi il possède déjà 2 lignes blanches.

    Ensuite, quand j'appuie sur mon bouton pour y mettre des données en ajoutant une pièce :

    Le 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
      Protected Sub btn_recap_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_recap.Click
     
            Dim i As Integer
            Dim piece() As String 'piece
            Dim motif() As String 'motif
            Dim qte() As String 'quantité
            Dim nbpiece As String
     
     
            piece = ajout_piece.Text.Split("|")
            motif = motifs_nc.Text.Split("|")
            qte = quantite_nc.Text.Split("|")
            nbpiece = piece.Count
     
     
     
            For i = 0 To nbpiece - 1
                'GridView1.Columns.Clear()
     
     
                AddDataToTable((piece(i).ToString), motif(i).ToString, qte(i).ToString, CType(Session("myDataTable"), DataTable))
                Me.GridView1.DataSource = CType(Session("myDatatable"), DataTable).DefaultView
                Me.GridView1.DataBind()
            Next
     
        End Sub
    J'obtiens cela :



    Je voudrais donc pouvoir vider le tableau avant de mettre d'autres données, avez-vous une solution ? Parce du coup, quand je reclick sur le bouton, j'ai des lignes en doublon

    gridview.rows/column.clear() ne fonctionne pas.

  13. #13
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    D'abord le tableau de base!
    Tu dis avant de remplir tes données il a déja des colonnes toutes faites?
    Tu utilises quoi pour créer se tableau?

  14. #14
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut
    Alors, en ce qui concerne la création du tableau, j'utilise la fonction suivante :

    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
    Private Function CreateDataTable() As DataTable
            Dim myDataTable As DataTable = New DataTable()
            Dim myDataColumn As DataColumn
     
            myDataColumn = New DataColumn()
            myDataColumn.DataType = Type.GetType("System.String")
            myDataColumn.ColumnName = "piece"
            myDataTable.Columns.Add(myDataColumn)
     
            myDataColumn = New DataColumn()
            myDataColumn.DataType = Type.GetType("System.String")
            myDataColumn.ColumnName = "motif"
            myDataTable.Columns.Add(myDataColumn)
     
            myDataColumn = New DataColumn()
            myDataColumn.DataType = Type.GetType("System.String")
            myDataColumn.ColumnName = "quantite"
            myDataTable.Columns.Add(myDataColumn)
     
            Return myDataTable
    J'ai 3 colonnes de base, bon maintenant, cela fonctionne à peu près, mis à par que j'ai toujours une première ligne blanche qui s'affiche.

    J'ai vérifier si je n'avais pas un espace quelque part qui causerait ce bazard, mais rien.

    Il faudrait que je puisse supprimer les lignes vide.

  15. #15
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    Ah ok d'accord et comment tu définies la gridview?

  16. #16
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut
    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
          If Me.IsPostBack = False Then
                Dim myDt As DataTable
                myDt = New DataTable()
                myDt = CreateDataTable()
                Session("myDataTable") = myDt
     
                Me.GridView1.DataSource = (CType(Session("myDataTable"), DataTable)).DefaultView
                Me.GridView1.DataBind()
            End If
     
     
            Dim j As Integer
            Dim piece_tab() As String 'piece
            Dim motif_tab() As String 'motif
            Dim qte() As String 'quantité
            Dim nbpiece As String
     
     
     
            piece_tab = ajout_piece.Text.Split("|")
            motif_tab = motifs_nc.Text.Split("|")
            qte = quantite_nc.Text.Split("|")
            nbpiece = piece_tab.Count
     
     
     
            If nbpiece > 0 Then
                For j = 0 To nbpiece - 1
     
                    If Not (qte(j).ToString = "") Then
                        If Not motif_tab(j).ToString = "" Then
                            If Not piece_tab(j).ToString = "" Then
                                AddDataToTable((piece_tab(k).ToString), motif_tab(k).ToString, qte(k).ToString, CType(Session("myDataTable"), DataTable))
                                Me.GridView1.DataSource = CType(Session("myDataTable"), DataTable).DefaultView
                                Me.GridView1.DataBind()
                            End If
                        End If
     
                    End If
                Next
     
            End If
    Je viens de résoudre mon problème de lignes blanches, en fait, il devait y avoir des espaces dans mon 'label' (que je n'ai pas trouvé), du coup, lors du 'split' il devait récupérer des champs vide et donc, créer des lignes vides.

    Je suis pas sur que ce soit très propre, mais cela fonctionne.

    Dernier soucis : Le tableau se met à jour au chargement de la page, cependant, les lignes se répètent( doublons) parce qu'il repart de 0, et réajoute toutes les pièces.

    C'est pour cela que je voulais effacer totalement le tableau pour repartir à vide.

  17. #17
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    Exuse moi je suis dans plusieurs post en se moment.
    Bravo c'est vrai que c'est pas évident du premeir coup.
    Pour évité les doublons si tu te connecte à une base de données y'a plusieurs requettes qui peuvent t'éviter cela sinon tu peux aussi utiliser une fonction qui viendra juste vider les lables

  18. #18
    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 jakichan007645 Voir le message
    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
          If Me.IsPostBack = False Then
                Dim myDt As DataTable
                myDt = New DataTable()
                myDt = CreateDataTable()
                Session("myDataTable") = myDt
     
                Me.GridView1.DataSource = (CType(Session("myDataTable"), DataTable)).DefaultView
                Me.GridView1.DataBind()
            End If
     
            Dim j As Integer
            Dim piece_tab() As String 'piece
            Dim motif_tab() As String 'motif
            Dim qte() As String 'quantité
            Dim nbpiece As String
     
            piece_tab = ajout_piece.Text.Split("|")
            motif_tab = motifs_nc.Text.Split("|")
            qte = quantite_nc.Text.Split("|")
            nbpiece = piece_tab.Count
     
            If nbpiece > 0 Then
                For j = 0 To nbpiece - 1
     
                    If Not (qte(j).ToString = "") Then
                        If Not motif_tab(j).ToString = "" Then
                            If Not piece_tab(j).ToString = "" Then
                                AddDataToTable((piece_tab(k).ToString), motif_tab(k).ToString, qte(k).ToString, CType(Session("myDataTable"), DataTable))
                                Me.GridView1.DataSource = CType(Session("myDataTable"), DataTable).DefaultView
                                Me.GridView1.DataBind()
                            End If
                        End If
                    End If
                Next
            End If
    Je viens de résoudre mon problème de lignes blanches, en fait, il devait y avoir des espaces dans mon 'label' (que je n'ai pas trouvé), du coup, lors du 'split' il devait récupérer des champs vide et donc, créer des lignes vides.

    Je suis pas sur que ce soit très propre, mais cela fonctionne.

    Dernier soucis : Le tableau se met à jour au chargement de la page, cependant, les lignes se répètent( doublons) parce qu'il repart de 0, et réajoute toutes les pièces.

    C'est pour cela que je voulais effacer totalement le tableau pour repartir à vide.
    Attention, tu bindes ta grid à chaque itération dans ta boucle For
    Qui plus est, tu la bindes une première fois inutilement dans ton premier If.
    Pour ce qui est des espaces dans tes strings, utilise la fonction Trim() pour les supprimer (ou TrimEnd et TrimStart si tes chaînes de caractères peuvent contenir des espaces au milieu et que tu veux les conserver)
    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
          If Me.IsPostBack = False Then
                Dim myDt As DataTable
                myDt = New DataTable()
                myDt = CreateDataTable()
                Session("myDataTable") = myDt
     
     
            Dim j As Integer
            Dim piece_tab() As String 'piece
            Dim motif_tab() As String 'motif
            Dim qte() As String 'quantité
            Dim nbpiece As String
     
     
     
            piece_tab = ajout_piece.Text.Trim().Split("|")
            motif_tab = motifs_nc.Text.Trim().Split("|")
            qte = quantite_nc.Text.Trim().Split("|")
            nbpiece = piece_tab.Count
     
     
     
            If nbpiece > 0 Then
                For j = 0 To nbpiece - 1
     
                    If Not (qte(j).ToString = "") Then
                        If Not motif_tab(j).ToString = "" Then
                            If Not piece_tab(j).ToString = "" Then
                                AddDataToTable((piece_tab(k).ToString), motif_tab(k).ToString, qte(k).ToString, CType(Session("myDataTable"), DataTable))
     
                            End If
                        End If
     
                    End If
                Next
     
            End If
    Me.GridView1.DataSource = CType(Session("myDataTable"), DataTable).DefaultView
                                Me.GridView1.DataBind()
        End If

  19. #19
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 21
    Par défaut
    Au terme de longues heures de travail acharné, j'ai réussi à avoir ce que je voulais.


    Gros merci à SonnyFab & Calagan.

    @Calagan : J'ai corrigé les erreurs de jeunesse que tu as souligné.

    à la prochaine !

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/12/2005, 16h39
  2. remplir un tableau sans doublons ...
    Par ryo-san dans le forum C
    Réponses: 22
    Dernier message: 10/11/2005, 12h43
  3. Remplir un tableau associatif
    Par photorelief dans le forum Langage
    Réponses: 1
    Dernier message: 04/11/2005, 18h20
  4. Lire et remplir un tableau
    Par harris_macken dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 26/09/2005, 01h10
  5. [PHP-JS] Remplir un tableau javascript selon un tableau php
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2005, 14h02

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