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

C# Discussion :

faire un graphique en utilisant les valeurs d'un datagridview


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 48
    Points : 1
    Points
    1
    Par défaut faire un graphique en utilisant les valeurs d'un datagridview
    Bonjour,
    je voudrais réaliser un graphique en récupérant les données qui sont dans un datagridview mais uniquement de certaines colonnes et je voudrais le faire dans une autre form est ce possible ?
    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Passioné ...
    Inscrit en
    Juillet 2020
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Passioné ...
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 145
    Points : 158
    Points
    158
    Par défaut
    Bonjour,
    Oui, en rendant public le contrôle datagridview afin de pouvoir y accéder d'un autre form, et en sélectionnant pour ton chart les colonnes qui doivent y être.
    Cordialement Denis

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 780
    Points : 5 537
    Points
    5 537
    Par défaut
    Ou en évitant la solution de facilité où il faudra tout recommencer si demain tes données pourraient provenir de plusieurs sources différentes...

    En créant une structure avec uniquement les données qui t'intéresse.
    Puis en alimentant ces données depuis ta grille.
    Puis en passant ces données (qui ne sont plus fortement liées à ton IHM) à ta fenêtre qui en fait un graphique.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 48
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Comment on fait pour rendre mon datagridview public ?
    Et en fait dans mon datagridview j'ai que des mesures que j'ai besoin mais je voudrais pouvoir les afficher dans un graphique et en fait le datagridview me permet d'afficher le fichier csv ou j'aurais toutes les données globale mais pour plus de facilité je voulais faire un graphique

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 780
    Points : 5 537
    Points
    5 537
    Par défaut
    Encore une fois, travailler avec la datagridview directement est une mauvaise idée.

    Il faut travailler SUR LES DONNÉES et non sur le composant qui les affiche.

    Donc charger tes données depuis le CSV pour en faire une List<T> (T étant une classe ou chaque propriété correspond à une colonne de ton CSV).

    Puis utiliser cette liste comme DataSource du datagridview sur un écran et pour faire ton graphique sur un autre.

  6. #6
    Membre habitué
    Homme Profil pro
    Passioné ...
    Inscrit en
    Juillet 2020
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Passioné ...
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 145
    Points : 158
    Points
    158
    Par défaut
    Bonjour, la propriété "modifiers" permet de rendre public le contrôle.
    Cela peut être utile dans certaines circonstances.

    Dans le cas présent, popo à mille fois raison. ( il est coutumier du fait ... ) Il faut effectivement se rendre indépendant de l'interface . Une structure, une liste d'éléments( public d'une form vers l'autre ) et ensuite alimenter ton chart.
    Cordialement Denis

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 48
    Points : 1
    Points
    1
    Par défaut
    Re
    Du coup j'ai essayé de faire une liste mais je n'arrive pas à l'afficher dans le datagridview
    j'ai fais ça pour faire la liste:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
             public List<string> whiteList = new List<string>
            {
                "Date",
                "Heure",
                "Température interne",
                "Température externe",
                "Humidité interne",
                "Humidité externe",
                "Direction du vent",
                "Vitesse du vent",
                "Ensolleillement",
                "Tension de la batterie",
                "Température de la batterie"
            };

  8. #8
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 780
    Points : 5 537
    Points
    5 537
    Par défaut
    C'est normal que ça n'affiche pas ce que tu veux puisque tu fais une liste de String au lieu de faire une liste d'objets.

    Ce n'est pas comme si je ne l'avais pas déjà écrit :
    Citation Envoyé par popo Voir le message
    faire une List<T> (T étant une classe ou chaque propriété correspond à une colonne de ton CSV)

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 48
    Points : 1
    Points
    1
    Par défaut
    ah désolé je savais pas qu'il y avait une différence je pensais que c'était ça
    je suis vraiment débutant :o

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 48
    Points : 1
    Points
    1
    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
    using (TextFieldParser csv = new TextFieldParser(@"C:/Users/Lucas/Documents/test.csv"))
                {
                    csv.TextFieldType = FieldType.Delimited;
                    csv.SetDelimiters(";");
                    while (!csv.EndOfData)
                    {
                        //Process row
                        string[] fields = csv.ReadFields();
                        foreach (string field in fields)
                        {
     
                            object Tempint = split[0];
                            object Tempext = split[1];
                            object humidint = split[2];
                            object humidext = split[3];
     
                        }
                    }
     
                }
    J'ai fais ça mais impossible d'utiliser tempint, tempext, etc pour afficher les données ..

  11. #11
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 780
    Points : 5 537
    Points
    5 537
    Par défaut
    Là tu as juste déclaré 4 objets.
    Il faut commencer par déclarer une CLASSE avec 4 propriétés.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 48
    Points : 1
    Points
    1
    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
            public class CSVProperties
            {
                public object Tempint { get; }
                public object Tempext { get; }
                public object Humidint { get; }
                public object Humidext { get; }
     
                public CSVProperties()
                {
     
                }
            }
    c'est mieux comme ça ?

  13. #13
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 780
    Points : 5 537
    Points
    5 537
    Par défaut
    C'est l'idée, oui.
    Maintenant, il faudrait typer les propriétés.

    Puisqu''à priori ce sont des températures et des taux d'humidité, il faudrait des Double ou encore des Decimal.

    N'hésite pas à nommer les choses de manière explicite (ex : TemperatureInterieure)

    Ah, et mettre les set; derrière les get;

    Ensuite on s'attaquera à l'alimentation depuis le CSV.

  14. #14
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 48
    Points : 1
    Points
    1
    Par défaut
    j'ai un bug je ne vois plus les messages que j'envoi dans le forum je sais pas si vous les recevez bien.
    j'ai crée une liste et une classe mais toujours pas de retour ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     donnees tempint = new donnees(tempint);
                donnees tempext = new donnees(tempext);
     
                List<donnees> list = new List<donnees>();
     
                list.Add(tempint);
                list.Add(tempext);
     
     
                    this.testdgv.ItemsSource = list;
    et la classe donnees est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     class donnees
        {
            public object tempint { get;}
            public object tempext { get;}
            public donnees(object tempint, object tempext)
            {
                this.tempint = tempint;
                this.tempext = tempext;
            }
        }
    pour l'instant j'essaye de le faire uniquement avec 2 colonnes

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 48
    Points : 1
    Points
    1
    Par défaut
    désolé j'avais pas vu le message précédent je dois aller sur la version pour imprimer la page web pour voir tous les messages apparament..
    du coup j'ai changé j'ai mis les set et j'ai mis les nom en entier
    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
            public object TemperatureInterieur { get; set; }
            public object TemperatureExterieur { get; set; }
            public object HumiditeInterieur { get; set; }
            public object HumiditeExterieur { get; set; }
            public object Enssolleillement { get; set; }
            public object TemperatureBatterie { get; set; }
            public object TensionBatterie { get; set; }
            public object DirectionDuVent { get; set; }
            public object VitesseDuVent { get; set; }
            public object Date { get; set; }
            public object Heure { get; set; }
            public donnees(object TemperatureInterieur, object TemperatureExterieur, object HumiditeInterieur, object HumiditeExterieur, object Enssolleillement, object TemperatureBatterie, object TensionBatterie, object VitesseDuVent, object DirectionDuVent, object Date, object Heure)
            {
                this.TemperatureInterieur = TemperatureInterieur;
                this.TemperatureExterieur = TemperatureExterieur;
                this.HumiditeInterieur = HumiditeInterieur;
                this.HumiditeExterieur = HumiditeExterieur;
                this.Enssolleillement = Enssolleillement;
                this.TemperatureBatterie = TemperatureBatterie;
                this.TensionBatterie = TensionBatterie;
                this.DirectionDuVent = DirectionDuVent;
                this.VitesseDuVent = VitesseDuVent;
                this.Date = Date;
                this.Heure = Heure;
            }

  16. #16
    Membre habitué
    Homme Profil pro
    Passioné ...
    Inscrit en
    Juillet 2020
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Passioné ...
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 145
    Points : 158
    Points
    158
    Par défaut
    Bonjour, déjà dans un premier temps, pourquoi se compliquer la vie ...

    Ta classe ne pourrait elle pas être comme ceci, avec des membres typés et clairement définis :

    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace exemple_site
    {
        internal class MesDonnees
        {
            private double _temperatureexterieure;
            private double _temperatureinterieure;
            private string _commentaire;
            private string _lieudelobservation;
            private int _numero;
     
            public double Temperatureexterieure { get => _temperatureexterieure; set => _temperatureexterieure = value; }
            public double Temperatureinterieure { get => _temperatureinterieure; set => _temperatureinterieure = value; }
            public string Commentaire { get => _commentaire; set => _commentaire = value; }
            public string Lieudelobservation { get => _lieudelobservation; set => _lieudelobservation = value; }
            public int Numero { get => _numero; set => _numero = value; }
        }
    }

    Puis pour alimenter cette classe :

    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
     
    namespace exemple_site
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
     
            List<MesDonnees> mesdonnees = new List<MesDonnees>();
     
            private void Form1_Load(object sender, EventArgs e)
            {
                // ici dans le load, tu peux alimenter ta liste ... elle est indépendante de ta datagridview ... Ensuite on fera une liaison ...
                // par exemple :
                MesDonnees MD = new MesDonnees();
                MD.Temperatureexterieure = 18.5;
                MD.Temperatureinterieure = 23.5;
                MD.Lieudelobservation = "Ouagadougou";
                MD.Numero = 152;
                mesdonnees.Add(MD);            
            }
        }
    }

  17. #17
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2022
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2022
    Messages : 48
    Points : 1
    Points
    1
    Par défaut
    mais ma liste je vais pouvoir l'alimenter avec mon document csv directement ?

  18. #18
    Membre habitué
    Homme Profil pro
    Passioné ...
    Inscrit en
    Juillet 2020
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Passioné ...
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 145
    Points : 158
    Points
    158
    Par défaut
    Oui, en prenant dans chaque ligne de ton csv ( qu'il faut splitter avec les séparateurs ... ) les variables que tu veux mettre dans ta liste. Tu boucles le nombre fois nécessaires et tu alimentes les propriétés d'une instance de la classe composant ta liste a chaque tour de boucle et ajoute cette instance à ta liste, et rebelote.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for(int i =0; i < 50; i++)
                {
                    MesDonnees M = new MesDonnees();
                    string ligne = "";
                    // lecture de la ligne string ligne dans le csv
                    string[] variables = ligne.Split(','); // si separateur = ,
                    M.Commentaire = variables[0];
                    M.Lieudelobservation=variables[1];
                    M.Temperatureinterieure = double.Parse(variables[2]);
                    M.Temperatureexterieure = double.Parse(variables[3]);
                    M.Numero = Int32.Parse(variables[4]);
                    mesdonnees.Add(M);              
                }
    Si tu ne connais pas le nombre de lignes, il faut au lieu d'une boucle for utiliser un while(!fin de fichier ) ...

  19. #19
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 780
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 780
    Points : 5 537
    Points
    5 537
    Par défaut
    DenisUrçais,

    Je ne vois pas en quoi la classe qu'il a écrit était compliquée. Tout ce qu'il manquait c'était le typage.
    Moi c'est plutôt ta manière de faire qui me paraît inutilement compliquée. Pourquoi créer des membres privés si c'est pour les exposer directement. Autant créer des membres publics directement comme l'avais très bien fait lucascsharp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class Donnees {
       public Double TemperatureInterieur { get; set; } 
       public Double TemperatureExterieur { get; set; } 
       public Double HumiditeInterieur { get; set; } 
       public Double HumiditeExterieur { get; set; } 
       public Double Enssolleillement { get; set; } 
       public Double TemperatureBatterie { get; set; } 
       public Double TensionBatterie { get; set; } 
       public String DirectionDuVent { get; set; } 
       public Double VitesseDuVent { get; set; } 
       public DateTime Date { get; set; } 
       public DateTime Heure { get; set; }
    }

  20. #20
    Membre habitué
    Homme Profil pro
    Passioné ...
    Inscrit en
    Juillet 2020
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Passioné ...
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2020
    Messages : 145
    Points : 158
    Points
    158
    Par défaut
    Oui certes pourquoi pas ...
    Je fais généralement de cette manière afin de pouvoir mettre du code dans le set ... l'ai proposé comme ça par habitude.

Discussions similaires

  1. Utiliser les valeurs d'une requete dans une autre requete ?!
    Par nekro65 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/03/2009, 11h16
  2. Graphique utilisant les valeurs d'une Listbox
    Par fermat dans le forum Débuter
    Réponses: 2
    Dernier message: 19/09/2008, 12h21
  3. Faire une moyenne en ignorant les valeurs nulles
    Par Giansolo dans le forum MATLAB
    Réponses: 2
    Dernier message: 08/06/2007, 14h38
  4. Réponses: 1
    Dernier message: 21/12/2006, 11h17
  5. Réponses: 5
    Dernier message: 05/10/2006, 10h18

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