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
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
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
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.
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
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.
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
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" };
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
J'ai fais ça mais impossible d'utiliser tempint, tempext, etc pour afficher les données ..
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]; } } }
Là tu as juste déclaré 4 objets.
Il faut commencer par déclarer une CLASSE avec 4 propriétés.
c'est mieux comme ça ?
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 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.
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 ...
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 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;
pour l'instant j'essaye de le faire uniquement avec 2 colonnes
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; } }
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; }
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); } } }
mais ma liste je vais pouvoir l'alimenter avec mon document csv directement ?
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.
Si tu ne connais pas le nombre de lignes, il faut au lieu d'une boucle for utiliser un while(!fin de fichier ) ...
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); }
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; } }
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager