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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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