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

Windows Forms Discussion :

DataTable - Ajout d'une colonne calculée


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Par défaut DataTable - Ajout d'une colonne calculée
    Bonjour à tous!!
    ceci est mon premier message et ça commence bien!!

    Voila en fait je suis sous vs 2005 et je crée une application winform.

    J'ai creer une fonction afin de me calculer le nombre de couleurs sur plusieurs champs sachant qu'ils sont tous typé 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Public Function FctCalcNbCoul(ByVal XRECT1 As String, ByVal XRECT2 As String, ByVal XRECT3 As String, ByVal XRECT4 As String, ByVal XRECT5 As String, ByVal XRECT6 As String, ByVal XVERS1 As String, ByVal XVERS2 As String, ByVal XFONDCHQ As String) As Integer
     
            Dim NbCoul As Integer
            Dim cpt As Integer
            cpt = 0
     
            If XRECT1 <> " " Then    '''j'ajoute 1 au compteur si champ pas vide   
                cpt = cpt + 1
                If XRECT2 <> " " Then
                    cpt = cpt + 1
                    If XRECT3 <> " " Then
                        cpt = cpt + 1
                        If XRECT4 <> " " Then
                            cpt = cpt + 1
                            If XRECT5 <> " " Then
                                cpt = cpt + 1
                                If XRECT6 <> " " Then
                                    cpt = cpt + 1
                                    If XVERS1 <> " " Then
                                        cpt = cpt + 1
                                        If XVERS2 <> " " Then
                                            cpt = cpt + 1
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
     
            XFONDCHQ = XFONDCHQ.Remove(0, 3)
            XFONDCHQ = XFONDCHQ.Remove(5, 9)
     
            NbCoul = CInt(XFONDCHQ) + cpt
     
            Return NbCoul
     
        End Function
    """""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    ensuite j'ajoute une nouvelle colonne à ma datatable et j'utilise la fonction de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oTable.Columns.Add("Nb Couleur", Type.GetType("System.Int32"), "FctCalcNbCoul(XRECT1_0, XRECT2_0, XRECT3_0, XRECT4_0, XRECT5_0, XRECT6_0, XVERS1_0, XVERS2_0, XFONDCHQ_0)")
    Mais ô problème de mer noire un message d'erreur trop cool apparait :
    ----------------
    L'expression contient un appel de fonction non défini FctCalcNbCoul()
    ---------------

    Merci d'avance pour votre aide!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut et bienvenue.

    L'expression (3e param) doit être une expression de calcul de type SQL. ex: une colonne "Total" dont l'expression va être "prix * quantite", où [prix] et [quatite] sont des colonnes de la requête.
    http://msdn.microsoft.com/en-us/library/632cdz7z.aspx

    Pour ton problème, tu es mieux de créer une colonne vide, sans expression et ensuite de boucler sur chaque Row et affecter ta valeur obtenue de ta fonction dans celle-ci.

    Suggestion: Pourquoi ne pas utiliser un tableau de paramètres plutôt que d'un paquet de variables?
    Voir section ParamArray: http://plasserre.developpez.com/v1-12.htm

  3. #3
    Membre averti
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Par défaut
    Merci de ton attention!
    Je vais suivre tes conseils et essayer de suite!
    et merci pour l'expplication!

  4. #4
    Membre averti
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Par défaut
    mais du coup de quelle manière devrais-je m'y prendre pour faire un tableau de paramètre???
    Car chaque ligne est soit vide soit à une couleur en string??

  5. #5
    Membre averti
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Par défaut changement
    Du coup j'ai suivi ton conseil et j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    oTable.Columns.Add("Nb Couleur", Type.GetType("System.SByte"), " ")
     
                Dim myRow As DataRow
                For Each myRow In oTable.Rows
                    FctCalcNbCoul("XRECT1_0", "XRECT2_0", "XRECT3_0", "XRECT4_0", "XRECT5_0", "XRECT6_0", "XVERS1_0", "XVERS2_0", "XFONDCHQ_0")
                Next myRow
    mais comment faire pour lui spécifier que c'est dans la datacolumn "Nb Couleur"
    qu'il faut mettre les résultats??

    Merci d'avance!

  6. #6
    Membre averti
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Par défaut
    j'ai trouvé comment spécifier la datacolumn :

    myRow("Nb Couleur") = FctCalcNbCoul(...)

    Mais j'ai un message d'erreur :

    l'index et le compte doivent faire référence à un emplacement situé dans la chaine.
    Nom du paramètre : count.

    je ne comprend vraiment pas...

  7. #7
    Membre averti
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Par défaut
    Du coup ma fonction est nickel, mais rien ne se rempli sur ma colonne en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    oTable.Columns.Add("NbCouleur", Type.GetType("System.SByte"), " ")
     
                Dim myRow As DataRow
                For Each myRow In oTable.Rows
                myRow("NbCouleur") = FctCalcNbCoul("XFONDCHQ_0", Couleurs(7))
                Next myRow
    dsl pour les message précédents je n'avais pas vu comment insérer le code dans les balises!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/11/2013, 14h23
  2. Réponses: 3
    Dernier message: 24/08/2012, 14h51
  3. d'un fichier xml à des tables Access : ajout d'une colonne calculée
    Par scribreiz dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 16/10/2009, 11h48
  4. DataTable - Ajout d'une colonne calculée
    Par dequi dans le forum JSF
    Réponses: 5
    Dernier message: 11/07/2007, 15h59

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