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 :

compter nombre de dossiers par mois?


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut compter nombre de dossiers par mois?
    Bonjour!

    me revoila avec un nouveau problème!

    dans le cadre d'un projet, je dois à partir des renseigements d'un datagridview,
    sortir un mini-datagridview qui compte le nombre de dossiers par mois en fonction de la borne de date saisie par l'utilisateur.

    voila ce que j'ai essayer de faire pour le mois de janvier mais cela ne marche pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Dim aRow As DataRow
                 For Each aRow In oTable.Rows
                DataGridViewRecap.DataSource = oTable.Select("Count(XCOMDAT_0) WHERE XCOMDAT_0 >= To-Date('01/01', 'DD/MM') AND XCOMDAT_0 <= To-Date('31/01', 'DD/MM') AND SHIDAT_0 > '" & DateDeb & "' AND SHIDAT_0 < '" & DateFin & "'")
                Next

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Citation Envoyé par Ouggada Voir le message
    cela ne marche pas

    message d'erreur ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    oups désolé! et merci de te pencher sur mon cas!

    du coup j'ai fais la chose d'une autre façon:

    la c'est ma fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Public Function RecapJanv(ByVal XCOMDAT As String) As Double
            Dim cpt As Double = 0
            Dim Z As String
            Z = Mid(XCOMDAT, 4, 7)
            If Z = "01" Then
                cpt = cpt + 1
            End If
            Return cpt
        End Function
    et la la façon dont j'essaye de remplir mon datagrid toujours à partir des données de mon autre datagrid :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each oRow In Me.DataGridViewBq.Rows
                    DataGridViewRecap.Rows.Add(RecapJanv("XCOMDAT_0"))
                Next
    Et le très beau message d'erreur :
    Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.DatagridviewRow' en type 'System.Data.DataRow'

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    une ligne de datagrid n'est pas le meme objet qu'une ligne de donnée dans un datatable

    donc réfléchis lequel des 2 tu veux ajouter à quoi et instancie le bon
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    en fait à partir du datable je sais le faire, cependant je veux récupérer la colonne XCOMDAT_0 après que l'utilisateur ai sélectionner l'année donc à partir de mon datagridview1, car en fait la finalité est d'exporter le tout dans un fichier excel.

    Du coup je vois pas comment m'y prendre, sachant que c'est le seul moyen que j'ai trouver de remplir mon mini-datagridview2...

    Si tu as une idée, je t'en serai très reconnaissant(je le suis déjà ké même!)

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    récupère les valeurs plutot que de récupérer la ligne
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Mais de quelle manière??

    je vois pas du tout quelle syntaxe je pourrai utiliser...

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faudrait expliciter

    à priori tu veux rajouter une ligne dans un datagridview qui en contient déjà pour faire un genre de total à la fin

    comment alimente tu ton datagridview ? y a t il des bindings dessus ou juste un datatable en datasource ?

    si c'est un datatable rempli avec la méthode fill, il te suffit de rajouter une ligne à ce datatable en y mettant les valeurs calculées ou en rééxécutant une requete de count puis seulement après de dire au datagridview d'afficher le datatable
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    re,

    excuse moi si je n'ai pas bien expliciter ma méthode :

    je rempli mon datatable avec un dataAdapter comme ceci :

    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
    Dim oAdapt As New OracleDataAdapter("SELECT XBQABR_0, XCODBANK_0, XBQNAM_0, XCODPRO_0, CLIP.XDOSCLI.XCOMDAT_0, CLIP.XDOSCLI.XDCNUM_0, CLIP.XDOSCLI2.XRECT1_0, CLIP.XDOSCLI2.XRECT2_0, CLIP.XDOSCLI2.XRECT3_0, CLIP.XDOSCLI2.XRECT4_0, CLIP.XDOSCLI2.XRECT5_0, CLIP.XDOSCLI2.XRECT6_0, CLIP.XDOSCLI2.XVERS1_0, CLIP.XDOSCLI2.XVERS2_0, CLIP.XDOSCLI2.XFONDCHQ_0, " & _
                "XREFCLI_0, XDLIVDEM_0, DLVDAT_0, XBATDRET_0, SHIDAT_0, XQTEDEM_0, (QTY_0 * 1000) AS QTY_0, cast(XMONTANT_0 As Decimal (15,2)) As XMONTANT_0, NETWEI_0, CLIP.SDELIVERY.SDHNUM_0 FROM CLIP.XBANQUE, CLIP.SDELIVERY, CLIP.SINVOICED, CLIP.XDOSCLI, CLIP.XDOSCLI2 " & _
                "WHERE CLIP.XBANQUE.XBQNUM_0=CLIP.SDELIVERY.XBQNUM_0 " & _
                "AND CLIP.SDELIVERY.XDCNUM_0=CLIP.XDOSCLI.XDCNUM_0 " & _
                "AND CLIP.SDELIVERY.XDCNUM_0=CLIP.XDOSCLI2.XDCNUM_0 " & _
                "AND CLIP.SINVOICED.XDCNUM_0=CLIP.XDOSCLI.XDCNUM_0 " & _
                "AND CLIP.SDELIVERY.SDHNUM_0=CLIP.SINVOICED.SDHNUM_0 ", oConnection)
     
                Dim oDataset As DataSet = New DataSet("oDataset")
     
                'Création d'une table contenat tous les champs requis
                Dim oTable As DataTable = New DataTable()
     
                'Remplissage de la datatable à partir de la requete sql
                oAdapt.Fill(oTable)
     
     
                oTable.Columns.Add("NbCouleur", Type.GetType("System.SByte"))
                Dim myRow As DataRow
     
                For Each myRow In oTable.Rows
                    myRow("NbCouleur") = FctCalcNbCoul(myRow("XRECT1_0"), myRow("XRECT2_0"), myRow("XRECT3_0"), myRow("XRECT4_0"), myRow("XRECT5_0"), myRow("XRECT6_0"), myRow("XVERS1_0"), myRow("XVERS2_0"), myRow("XFONDCHQ_0"))
                    'oTable.Rows.Add(myRow("NbCouleur")) cause message d'erreur index et compte... 
                Next myRow
     
     
                oTable.Columns.Add("Ecart", Type.GetType("System.Double"))
                Dim oRow As DataRow
     
                For Each oRow In oTable.Rows
                    oRow("Ecart") = nbjourouvrable(oRow("XDLIVDEM_0"), oRow("DLVDAT_0"))
                Next oRow
     
     
                'Fermeture de la connexion afin de ne pas monopoliser les ressources
                oConnection.Close()
     
     
                Dim oDataview As DataView = New DataView(oTable)
                oDataview.Table = oDataset.Tables("oTable")
                oDataview = oTable.DefaultView
                oDataview.Sort = "SHIDAT_0"
                oDataview.RowFilter = "SHIDAT_0 > '" & DateDeb & "' AND SHIDAT_0 < '" & DateFin & "' AND XBQABR_0 = '" & ReportAutoBq.ComboBoxTrigram.SelectedItem & "'"
    DataGridViewBq.DataSource = oDataview
    Ainsi j'ai un premier datagrid, qui est fonction des paramètres choisit par l'utilisateur. Ce datagrid, je l'exporte vers une feuille excel.

    ET ensuite je dois, dans une autre feuille excel, envoyer le nombre de dossier(que je compte avec la colonne XCOMDAT_0) par mois de cette manière :
    Janvier 5
    Février 3
    .........
    Décembre 4
    Donc je dois faire en sorte de récupérer une colonne de 12 membres d'ou le fait que j'ai penser créer un deuxième datagrid sachant que j'ai 2 autres colonnes à l'intérieur mais comme c'est la même chose que pour la première colonne, si je résout le problème pour l'une, ce sera réglé pour les autres.

    Pour finir le deuxième datagridview est complètement vierge.

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il est possible de parcourir les données du datatable par code
    donc tu dois pouvoir trouver ton count

    pour stocker les count tu peux utiliser un tableau
    (de 0 à 12 mais on utilisera pas le 0)

    puis tu fais un for each sur la colonne qui contient la date (enfin sur les lignes et tu regardes la valeur de la colonne), si le mois = janvier tu fais
    (.Month retourne le numéro du mois pour une variable date)

    ensuite pour mettre les données dans le datagridview qui est vide tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i as integer = 1 to 12
      monDatagridView.Rows.Add(mois(i),t(i))
    next
    ou mois retourne le nom du mois par rapport à son numéro (y a ptete une fonction qui existe pour ca deja)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    merci pour ton attention!

    le problème c'est que dans la base de donnée, cette colonne qui est sencée être déclarer en date est de type string...allez savoir pourquoi!
    De fait je n'ai aucun droit pour modifier ce problème et je dois donc faire avec...
    C'est pour cela que dans ma fonction je n'ai pas utiliser les fonctions sur les dates.

  12. #12
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ce n'est pas un soucis, ca sera peut etre moins performant, mais il est possible de transformer le string en date

    dim d as date = cdate(lavaleurstring)
    et d.month contient le numéro du mois

    à savoir que cdate plante s'il n'arrive pas à convertir en date, genre si le string vaut ""
    dans ce cas, mieux vaut utiliser date.tryparse, s'il n'y arrive pas tu fais un continue for pour ne pas traiter cette ligne


    enfin une date dans un string, c'est mal conçu ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  13. #13
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    je ne te le fais pas dire....

    mais bon, disons qu'il faut de tout pour faire un monde!

    l est possible de parcourir les données du datatable par code
    donc tu dois pouvoir trouver ton count

    pour stocker les count tu peux utiliser un tableau
    Code :

    dim t(12) as integer
    j'ai un problème de compréhension avec les tableaux, du coup si tu pouvais m'indiquer la manière dont je pourrais mettre le résultat de mon count dans un tableau ce serait super!

    Pour l'instant j'ai fais ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim T(12) As String
                T(1) = oTable.Select("Count(XCOMDAT_0) WHERE To-Date(XCOMDAT_0, 'MM') = To-Date('01', 'MM') AND SHIDAT_0 > '" & DateDeb & "' AND SHIDAT_0 < '" & DateFin & "' AND XBQABR_0 = '" & ReportAutoBq.ComboBoxTrigram.SelectedItem & "'")
    Mais non seulemnt XCOMDAT_0 n'est pas une date, mais en plus
    j'ai le message d'erreur suivant :
    Une valeur de type 'Tableau à 1 dimension(s) de System.Data.DataRow' ne peut pas être convertie en 'String'.
    thanks!

  14. #14
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    j'sais pas si on va y arriver ...
    la solution que je te donne c'est de pas passer par un select avec un where étrange sur ton datatable mais de le faire à la main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Dim t(12) As Integer ' contient le nombre as integer d'occurence par mois  t(1) représente le nombre pour le mois 1 etc...
     
     
    For Each ligne As System.Data.DataRow In oTable.Rows ' parcour de chaque ligne
       Dim d As Date
       if Not Date.TryParse(ligne.Item([numero ou nom de la colonne]).tostring,d) then Continue For  'ligne.item permet de connaitre la valeur sur la ligne pour une colonne donnée
       t(d.Month) += 1
    Next
    à mettre une fois que oTable est rempli
    et à la fin tu as un tableau qui te permet de connaitre le nombre d'occurence de chaque mois
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  15. #15
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    Sinon à coté de ça j'ai trouver cette idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridViewRecap.Rows.Add(oTable.Select("Count(XCOMDAT_0) WHERE " & Mid("XCOMDAT_0", 4, 2) & " = '01' AND SHIDAT_0 > '" & DateDeb & "' AND SHIDAT_0 < '" & DateFin & "' AND XBQABR_0 = '" & ReportAutoBq.ComboBoxTrigram.SelectedItem & "'"))
    Mais il me met :
    Opérande manquant après 'WHERE'

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    bon bah moi je laisse tomber
    bonne chance avec ton truc imbuvable ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut
    merci quand même de t'être penché sur mon cas....

    moi je continue à nager ou à me noyer dans ma mer... noire!!!

  18. #18
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 31
    Points : 10
    Points
    10
    Par défaut Mission complete
    Finalement j'ai trouver une solution tout seul!

    je poste ma soluce au cas ou quelqu'un aurait le même problème....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim OadaptJanv As New OracleDataAdapter("Select CLIP.XDOSCLI.XCOMDAT_0 FROM CLIP.XDOSCLI, CLIP.SDELIVERY, CLIP.XBANQUE " & _
                "WHERE CLIP.XBANQUE.XBQNUM_0=CLIP.SDELIVERY.XBQNUM_0 AND CLIP.SDELIVERY.XDCNUM_0=CLIP.XDOSCLI.XDCNUM_0 " & _
                "AND CLIP.XDOSCLI.XCOMDAT_0 >= '01/01/" & Z & "' AND CLIP.XDOSCLI.XCOMDAT_0 <= '31/01/" & Z & "' " & _
                "AND SHIDAT_0 >= '" & ReportAutoBq.TextBoxDatDeb.Text & "' AND SHIDAT_0 <= '" & ReportAutoBq.TextBoxDatFin.Text & "' AND XBQABR_0 = '" & ReportAutoBq.ComboBoxTrigram.SelectedItem & "'", oConnection)
                Dim oTableJanv As DataTable = New DataTable
                OadaptJanv.Fill(oTableJanv)
    DataGridViewRecap.Rows.Add(oTableJanv.Rows.Count.ToString)

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

Discussions similaires

  1. [XL-2003] Compter le nombre de jours par mois entre deux dates
    Par Mikayel dans le forum Excel
    Réponses: 8
    Dernier message: 23/09/2016, 13h36
  2. Compter le nombre de jour par mois d'un événement.
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/04/2011, 11h56
  3. [MySQL] compter le nombre de visiteurs par mois?
    Par mustapha_aim dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 13/08/2010, 15h26
  4. Réponses: 2
    Dernier message: 23/06/2009, 13h36
  5. Compter le nombre d'articles par mois
    Par Al3x dans le forum Requêtes
    Réponses: 4
    Dernier message: 04/08/2008, 18h14

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