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

VB.NET Discussion :

Opérations sur un DataGridView [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Hydraulique et Hydrologie
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hydraulique et Hydrologie
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut Opérations sur un DataGridView
    Bonjour tout le monde

    Bon voilà, je suis en stage, et je dois réaliser une application qui simule la loi de débit au niveau d'un ensemble d'ouvrages hydrauliques.
    Normalement j'ai fait le gros du travail et il ne me reste plus qu'un seul truc, Je dois importer les données des mesures des capteurs installés tout le long du canal (fichier excel ou csv), les afficher sur un DataGridView (chose faite ça marche très bien même) puis sur le même DGV je dois créer 2 nouvelles colonnes qui seront le résultat d'un certain nombre d'equations utilisant les données des 2 premières colonnes importées d'excel.

    --> Donc là j'arrive à affichier les données sur le DGV mais je ne sais pas comment faire pour calculer et afficher les 2 nouvelles colonnes ?! de l'aide SVP

    les équations sont un peu compliquées c pour ça que j'ai po voulu les écrire mais imaginons un truc simple:



    voilà les paramètres que j'utiliserai pour calculer F4


  2. #2
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Bonjour,

    Comment injectes tu tes données dans ton contrôle ? par une insertion via code ou tu passes par un binding via la propriété DataSource ?
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  3. #3
    Membre du Club
    Homme Profil pro
    Hydraulique et Hydrologie
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hydraulique et Hydrologie
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    J'ai utilisé un OLEDB voilà le code ci-dessous !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            mycon = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=C:\Items.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=No""")
     
            mycomd = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", mycon)
     
            mycomd.TableMappings.Add("Table", "TestTabe")
            Dst = New System.Data.DataSet
            mycomd.Fill(Dst)
     
            DataGridView1.DataSource = Dst.Tables(0)
     
        End Sub

  4. #4
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Très bon réflexe ;-)

    Si j'ai bien compris l’énoncé de ton soucis, les 2 colonnes comprenant tes formules (et donc leurs résultats à afficher) ne sont pas dans le fichier excel ?

    Il y a je pense plusieurs manières de venir à bout de ce "problème".

    1. Tu parcoures une première fois ton fichier excel et pour chaque ligne tu rajoutes les 2 colonnes avec leurs résultats respectifs et puis tu effectues ta lecture comme actuellement.

    2. Après le chargement dans le DataSet tu rajoutes les 2 colonnes dans le DataTable créé et tu parcours toutes les lignes pour effectuer le calcul des résultats.

    3. Je ne pense pas qu'il existe un événement sur le DataGridView qui serait déclenché à chaque affichage d'une ligne ce qui te permettrait de faire le calcul à la volée. Mais si cela existe je crains que le traitement ne soit plus lent vu que cela se passerais lors de l'affichage.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Membre du Club
    Homme Profil pro
    Hydraulique et Hydrologie
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hydraulique et Hydrologie
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    Tout d'abord je vous remercie pour votre aide,

    Sur le fichier Excel je n'aurai que 2 colonnes la première = hauteur d'eau à l'amont de l'ouvrage et la deuxième = hauteur d'eau à l'aval.
    toutes fois ce que je veux faire (produit final) est:
    - calculer les paramètres et les caractéristiques des ouvrages (2ème interface sur mon 1 post)
    - récupérer les données des capteurs et les afficher sur un DGV (1ère interface), ici c'est qq valeurs mais apr ça sera des mesures avec un pas de temps d'une minutes (un grand nombre de données)
    - calculer les 2 nouvelles colonnes en fonction des paramètres et de données de mesures et les afficher sur le même DGV

    Je pense que c'est ce que vous avez expliquer dans votre 2ème solution !!
    sauf que je ne vois pas vraiment comment faire.

  6. #6
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    En fait je n'ai jamais travaillé avec le TableMappings, je passe généralement par un DataAdapter. Mais si je ne me trompe pas le résultat obtenu dans ton cas (et tu me contredis si je me trompe ;-) ) est une DataTable dans le DataSet portant le nom "TestTabe" (serais pas plutôt "TestTable" que tu aurais voulu mettre).

    Cette DataTable contient donc les colonnes et données contenues dans ton fichier Excel.

    Donc pour rajouter une colonne à une DataTable tu fais comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub AddColl(ByVal pColumnName As String, ByVal pType As System.Type, Optional ByVal pUnique As Boolean = False)
    	Dim col As New DataColumn
     
    	With col
    		.DataType = pType
    		.ColumnName = pColumnName
    		.Unique = pUnique
    	End With
     
    	ds.Tables("TestTabe").Columns.Add(col)
    End Sub
    Après il te restera à parcourir les lignes de ta DataTable pour faire tes calculs et insérer les résultats dans chaque ligne.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Hello,

    Ta problématique ne se gère pas au niveau du datagridview mais au niveau de l'objet qui contient les données.

    Actuellement dans ton cas c'est une datatable (selon ton exemple). Il faut donc d'ajouter une colonne calculée à ta datatable. C'est à dire une colonne qui calcule sa valeur en fonction des autres colonnes. (possible d'utiliser des fonction d'agrégation si la table a des relations, mais on s'éloigne de ton problème)

    Un exemple simple, on trouve facilement d'autre documentation sur le sujet.
    http://www.codeproject.com/Articles/...aTables-Csharp.

    La (Les) colonne(s) supplémentaire(s) pourront ensuite être affichée sur la grille (en mode autocreatcolumn ça se fait automatiquement).

    La complexité, ou plutôt le type de calcul, que l'on peut effectué par ce moyen est dépendant de la syntaxe des expressions. Pour une soustraction de deux colonnes il n'y a pas de problème, pour la fonction inconnue à vérifier.


    Il existe sinon 2 autres possibilités:

    1. Utiliser les éléments de formatage d'une cellule d'un datagridview pour effectuer le calcul. Ca donne un code bien moche et c'est potentiellement un problème pour les performances du logiciel (tout dépend du calcul et du nombre de ligne).

    2. Charger le résultats de ta requête dans des objets avec des propriétés calculée (Read Only) au lieu d'une datatable. Néanmoins c'est la solution la plus coûteuse en terme d'implémentation (temps de travail du programmeur) et de connaissance technique.

  8. #8
    Membre du Club
    Homme Profil pro
    Hydraulique et Hydrologie
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hydraulique et Hydrologie
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    infosam76
    sinople

    Merciiii les amis pour votre aide, je vous tiens au courant dès que j'ai de nouveau

  9. #9
    Membre du Club
    Homme Profil pro
    Hydraulique et Hydrologie
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hydraulique et Hydrologie
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    Bonjour les amis,

    en travaillant avec un collègue hier soir j'ai pu trouver une solution, et c'est ce que vous m'avez conseillé de faire,
    Donc je lis mes données directement sur excel, je fais les opérations nécessaires puis j'actualise le fichier et je récupère le tout au niveau du DGV, utilisant le code que je vous ai transmis hier

    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
    Imports Microsoft.Office.Interop
     
    Public Class Form1
        Public appexcel As New Excel.Application
        Public classeur As Excel.Workbook
        Public feuille As Excel.Worksheet
        Public fenetre As New OpenFileDialog
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                fenetre.ShowDialog()
                classeur = appexcel.Workbooks.Open(fenetre.FileName)
                feuille = classeur.Worksheets(1)
                'Calculer le nbr de mesures présents sur la feuille Excel
                Dim nb As Integer
                nb = -1
                'Num de la ligne où le programme commence les calculs (1ère ligne en générale réservée pour les titres)
                Dim index As Integer = 2
                'La boucle s'arrête quand la valeur de la cellule où on est est vide (nothing)
                Do Until feuille.Cells(index, 2).value Is Nothing
                    nb += 1
                    index += 1
                Loop
                For i = 2 To nb + 2
                    'Dans cette boucle on réalise les différentes opérations souhaitées 
                    feuille.Cells(i, 5).value = feuille.Cells(i, 2).value + feuille.Cells(i, 3).value
                    feuille.Cells(i, 6).value = feuille.Cells(i, 4).value * feuille.Cells(i, 5).value
                Next
                classeur.Save()
                classeur.Close()
                appexcel.Quit()
            Catch
                appexcel.Quit()
            End Try
        End Sub
    End Class

  10. #10
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Et bien voila si tu as trouvé une solution c'est très bien. Il me semble que c'est la solution la plus propre.

    N'oublie pas de flagué le post comme résolu si ton problème est résolu.
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  11. #11
    Membre du Club
    Homme Profil pro
    Hydraulique et Hydrologie
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hydraulique et Hydrologie
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    Citation Envoyé par infosam76 Voir le message
    Et bien voila si tu as trouvé une solution c'est très bien. Il me semble que c'est la solution la plus propre.
    Merci pour tout les amis

  12. #12
    Membre du Club
    Homme Profil pro
    Hydraulique et Hydrologie
    Inscrit en
    Novembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hydraulique et Hydrologie
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2011
    Messages : 7
    Par défaut
    Juste pour le partage de l'information voilà un code qui permet de récupérer les données dans un fichier Excel et le mettre directement dans un DGV puis tracer un graphe ne ligne pour les données sélectionnées !!
    Le graphe à l'air un petit mal dimensionné mais c juste à couse des données car les débit sont faibles!



    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
    Imports System.Data.Odbc
    Imports Microsoft.Office.Interop
    Imports System.Data.OleDb
     
    Public Class Form2
        Dim connect As OleDb.OleDbConnection
        Dim adapter As OleDb.OleDbDataAdapter
        Dim dsTest As DataSet
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     
            Dim ofd As New OpenFileDialog
            ofd.Filter = "Excel Files (*.xls)|*.xls|All Files (*.*)|*.*"
     
            If ofd.ShowDialog() = Windows.Forms.DialogResult.OK AndAlso ofd.FileName <> "" Then
                Try
                    connect = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & ofd.FileName & ";Extended Properties=""Excel 8.0;HDR=Yes;""")
                    connect.Open()
                    adapter = New OleDbDataAdapter("SELECT * FROM [Feuil1$]", connect)
                    dsTest = New DataSet
                    adapter.Fill(dsTest)
                    DataGridView1.DataSource = dsTest.Tables(0).DefaultView
                Catch ex As Exception
                    MessageBox.Show(Err.Description)
                Finally
                    connect.Close()
                End Try
            End If
     
            With Chart1.ChartAreas(0)
                .AxisX.Minimum = 0
                .AxisX.Maximum = 20
                .AxisX.Interval = 5
                .AxisY.Minimum = 0
                .AxisY.Maximum = 15
                .AxisY.Interval = 5
                .AxisX.Title = "Pas de temps"
                .AxisY.Title = "Débit véhiculé (m3/s)"
            End With
            With Chart1.Series(0)
                .Points.DataBind(dsTest.Tables(0).DefaultView, "Pas de temps", "Débit véhiculé (m3/s)", Nothing)
                .ChartType = DataVisualization.Charting.SeriesChartType.Line
                .BorderWidth = 4
            End With
     
        End Sub
     
    End Class

  13. #13
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Très bon retour d'informations merci à toi
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 17/03/2008, 17h00
  2. Opérations sur les matrices...
    Par aokiseiichiro dans le forum C
    Réponses: 32
    Dernier message: 28/07/2005, 17h10
  3. opération sur fermeture de fenêtre
    Par java_math dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 20/06/2004, 22h52
  4. opérations sur les bits d'un byte
    Par petitours dans le forum C++Builder
    Réponses: 4
    Dernier message: 10/02/2004, 20h42
  5. opérations sur les dates
    Par coucoucmoi dans le forum Débuter
    Réponses: 2
    Dernier message: 12/08/2003, 11h45

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