C'est presque un raisonnement de chef ca! :aie:
Bien souvent ca va plus vite de repartir de zéro proprement plutot qu'empiler des catas sur des catas... Bonjour la maintenance après...
Version imprimable
salut les gars,
alors tout d'abord j'ai essayé ta methode bnrf1, et en mettant donc la ligne de suivante à la place de l'autre
Cela me renvoit une erreur dans la fonctionCode:dataGridView1.DataSource = FlipDataSet(statsdataset);
message :Code:
1
2
3
4 private void dataGridViewStatStyle() { // rendre invisibles les colonnes suivantes dataGridView1.Columns["nb_utilisateur_newsletter"].Visible = false;
aurais tu une idée stpCitation:
La référence d'objet n'est pas définie à une instance d'un objet.
PitMarvick merci pour ton commentaire !!!!
ça ma super aidé à avancer ta remarque.
Au cas où tu aurais des conseils techniques par rapport au problème actuel,
ça serait mieux lol
quand à ta réponse thomlev, si tu vois plusieurs fois les memes methodes de style apparaitre (form_load, evenement click du bouton stats et dans la fonction de style) c'est qu'il ne me les prends pas en compte quand je les met uniquement dans la fonction de style.
D'où les copier/coller et la répétition du timer :mrgreen:
C'est pour ça que ça me parait chaud pour moi débutant
ben le problème reste toujours le meme
j'ai beau essayé ce qu'on me dis par ci par là
et j'arrive pas.
enfin bref
merci pour votre aide en tout cas
vais continuer a chercher malgré tout
il parait que c'est comme ça qu'on progresse
alors voilà, j'ai écouté vos conseils les gars. Car à force de chercher et ne pas trouver il faut se rendre à l'évidence. Donc j'ai pensé à refaire mon programme
pour qu'il soit plus facile à lire. J'ai enlevé la methode de flip pour éviter les embrouilles.Le voici :
J'aimerais que l'on me dise si au niveau "maintient" ou "lisibilité" c'est correct.Code:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253 namespace form1 { public partial class Form1 : Form { bool afficherStat = false; public Form1() { InitializeComponent(); CreerGraphique(zedGraphControl1); } private void Form1_Load(object sender, EventArgs e) { string filePath = "http://www.beautefrance.com:8080/script/widget_statsvente.php"; XmlTextReader txtReader = new XmlTextReader(filePath); statsdataset.Clear(); statsdataset.ReadXml(txtReader); dataGridView1.DataSource = statsdataset; dataGridView1.DataMember = "stat"; // retourne le style lors du click sur le bouton de la page 1 this.dataGridViewStatStyle(); afficherStat = true; Timer timer1 = new Timer(); timer1.Interval = 8000; timer1.Tick += timer1_Tick; timer1.Start(); } private void btnStat_Click(object sender, EventArgs e) { string filePath = "http://www.beautefrance.com:8080/script/widget_statsvente.php"; XmlTextReader txtReader = new XmlTextReader(filePath); statsdataset.Clear(); statsdataset.ReadXml(txtReader); dataGridView1.DataSource = statsdataset; dataGridView1.DataMember = "stat"; // retourne le style lors du click sur le bouton de la page 1 this.dataGridViewStatStyle(); afficherStat = true; } private void btnCom_Click(object sender, EventArgs e) { string filePath1 = "http://www.beautefrance.com:8080/script/widget_cmdjour.php"; XmlTextReader txtReader1 = new XmlTextReader(filePath1); comsdataset.Clear(); comsdataset.ReadXml(txtReader1); dataGridView1.DataSource = comsdataset; dataGridView1.DataMember = "commande"; // retourne la methode cellFormating de la page 2 pour la colorisation des cellules dataGridView1.CellFormatting += dataGridView1_CellFormatting; // retourne le style lors du click sur le bouton de la page 2 this.dataGridViewComStyle(); afficherStat = false; } private void dataGridViewStatStyle() { // rendre invisibles les colonnes suivantes dataGridView1.Columns["nb_utilisateur_newsletter"].Visible = false; dataGridView1.Columns["nb_utilisateur_cmd"].Visible = false; dataGridView1.Columns["nb_utilisateur"].Visible = false; dataGridView1.Columns["nb_produit_vendus"].Visible = false; dataGridView1.Columns["ca_1"].Visible = false; dataGridView1.Columns["ca_2"].Visible = false; dataGridView1.Columns["ca_3"].Visible = false; dataGridView1.Columns["ca_4"].Visible = false; dataGridView1.Columns["ca_5"].Visible = false; dataGridView1.Columns["ca_6"].Visible = false; dataGridView1.Columns["ca_7"].Visible = false; dataGridView1.Columns["ca_8"].Visible = false; dataGridView1.Columns["ca_9"].Visible = false; dataGridView1.Columns["ca_10"].Visible = false; dataGridView1.Columns["ca_11"].Visible = false; dataGridView1.Columns["ca_12"].Visible = false; dataGridView1.Columns["ca_prec"].Visible = false; dataGridView1.Columns["ca_prec_1"].Visible = false; dataGridView1.Columns["ca_prec_2"].Visible = false; dataGridView1.Columns["ca_prec_3"].Visible = false; dataGridView1.Columns["ca_prec_4"].Visible = false; dataGridView1.Columns["ca_prec_5"].Visible = false; dataGridView1.Columns["ca_prec_6"].Visible = false; dataGridView1.Columns["ca_prec_7"].Visible = false; dataGridView1.Columns["ca_prec_8"].Visible = false; dataGridView1.Columns["ca_prec_9"].Visible = false; dataGridView1.Columns["ca_prec_10"].Visible = false; dataGridView1.Columns["ca_prec_11"].Visible = false; dataGridView1.Columns["ca_prec_12"].Visible = false; // suppression de la colonne vide de gauche; dataGridView1.RowHeadersVisible = false; // mode de selection des cellules dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.MultiSelect = false; // couleur des boutons lors de la pression btnStat.BackColor = Color.LightSkyBlue; btnCom.BackColor = Color.LightGray; // modif des titres dataGridView1.Columns["ca"].HeaderText = "Chiffres d'Affaires"; dataGridView1.Columns["nb_cmd"].HeaderText = "Nombres de Commandes"; dataGridView1.Columns["ca_mois"].HeaderText = "CA / Mois"; dataGridView1.Columns["ca_moyenne_jour"].HeaderText = "CA Moyen / Jour"; dataGridView1.Columns["prix_moyen_cmd"].HeaderText = "Prix Moyen Commande"; dataGridView1.Columns["prix_moyen_produit"].HeaderText = "Prix Moyen Produit"; // style des colonnes du tableau dataGridView1.Columns[0].DefaultCellStyle.Font = new Font(Control.DefaultFont, FontStyle.Bold); dataGridView1.Columns[1].DefaultCellStyle.Font = new Font(Control.DefaultFont, FontStyle.Italic); dataGridView1.Columns[0].DefaultCellStyle.BackColor = Color.Wheat; dataGridView1.Columns[1].DefaultCellStyle.BackColor = Color.LightGray; // redimensionnement des colonnes par rapport a la largeur du widget dataGridView1.Columns[0].Width = 160; dataGridView1.Columns[1].Width = 80; // Couleur de separation des cellules dataGridView1.GridColor = Color.White; // Suppression des rangées d'entete //dataGridView1.ColumnHeadersVisible = false; // on enleve le focus de selection this.dataGridView1.Rows[0].Selected = false; } private void dataGridViewComStyle() { dataGridView1.Columns["id"].Visible = false; dataGridView1.Columns["statut"].Visible = false; // renommination des titres dataGridView1.Columns["date_com"].HeaderText = "DATE DE COMMANDE"; dataGridView1.Columns["total"].HeaderText = "TOTAL"; dataGridView1.Columns["type_paiement"].HeaderText = "PAIEMENT"; // redimensionnement des colonnes de la page 2 dataGridView1.Columns[1].Width = 85; dataGridView1.Columns[3].Width = 70; dataGridView1.Columns[4].Width = 67; // couleur des boutons lors de la pression btnCom.BackColor = Color.LightSkyBlue; btnStat.BackColor = Color.LightGray; dataGridView1.ColumnHeadersVisible = true; // Couleur de separation des cellules dataGridView1.GridColor = Color.White; // on enleve le focus de selection this.dataGridView1.Rows[0].Selected = false; // couleur de la cellule paiement dataGridView1.Columns["total"].DefaultCellStyle.BackColor = Color.Wheat; } private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { // formatage des cellules date de commande par rapport au statut if (dataGridView1.Columns[e.ColumnIndex].Name == "date_com") { // Vérification de la valeur dans la colonne Statut if ((String)dataGridView1.Rows[e.RowIndex].Cells["statut"].Value == "1") { e.CellStyle.BackColor = Color.LightGreen; } else { e.CellStyle.BackColor = Color.Violet; } } // formatage des cellules mode de paiement if (dataGridView1.Columns[e.ColumnIndex].Name == "type_paiement") { // Vérification de la valeur dans la colonne if ((String)dataGridView1.Rows[e.RowIndex].Cells["type_paiement"].Value == "CB") { e.CellStyle.BackColor = Color.RosyBrown; } else if ((String)dataGridView1.Rows[e.RowIndex].Cells["type_paiement"].Value == "Chèque") { e.CellStyle.BackColor = Color.Silver; } else if ((String)dataGridView1.Rows[e.RowIndex].Cells["type_paiement"].Value == "Paypal") { e.CellStyle.BackColor = Color.LightSalmon; } } } private void timer1_Tick(object sender, EventArgs e) { if (afficherStat) { string filePath = "http://www.beautefrance.com:8080/script/widget_statsvente.php"; XmlTextReader txtReader = new XmlTextReader(filePath); statsdataset.Clear(); statsdataset.ReadXml(txtReader); //dataGridView1.DataSource = statsdataset; dataGridView1.DataSource = FlipDataSet(statsdataset); dataGridView1.DataMember = "stat"; dataGridViewStatStyle(); // on enleve le focus de selection this.dataGridView1.Rows[0].Selected = false; } else { string filePath1 = "http://www.beautefrance.com:8080/script/widget_cmdjour.php"; XmlTextReader txtReader1 = new XmlTextReader(filePath1); comsdataset.Clear(); comsdataset.ReadXml(txtReader1); dataGridView1.DataSource = comsdataset; dataGridView1.DataMember = "commande"; dataGridViewComStyle(); } Timer timer1 = new Timer(); timer1.Interval = 8000; timer1.Tick += timer1_Tick; timer1.Start(); }
merci de me donner vos avis
A première vue ça semble bien mieux.
Une remarque cependant : concernant le timer.
Pas besoin d'un créer un à chaque fois. Une fois c'est bon.
Code:
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 namespace form1 { public partial class Form1 : Form { private bool afficherStat = false; private Timer timer1; public Form1() { InitializeComponent(); CreerGraphique(zedGraphControl1); timer1 = new Timer(); timer1.Interval = 8000; timer1.Tick += timer1_Tick; timer1.Start(); } private void Form1_Load(object sender, EventArgs e) { [...] timer1.Start(); } [...] private void timer1_Tick(object sender, EventArgs e) { if (afficherStat) { [...] } else { [...] } } } }
Autre chose :
Dans le Form1_Load tu as la même chose que dans btnStat_Click.
Soit tu fais, mais ce n'est pas forcément super clair,Code:
1
2
3
4
5 private void Form1_Load(object sender, EventArgs e) { btnStat_Click(null, null); timer1.Start(); }
soit tu mets ce qui est en commun dans une autre méthode ( majStat() ), que tu appelles dans Form1_Load et dans btnStat_Click.
et du coup il faudrait faire pareil avec majCom et btnCom_Click pour uniformiser le toutCode:
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 private void Form1_Load(object sender, EventArgs e) { majStat(); timer1.Start(); } private void btnStat_Click(object sender, EventArgs e) { majStat() } private void majStat() { string filePath = "http://www.beautefrance.com:8080/script/widget_statsvente.php"; XmlTextReader txtReader = new XmlTextReader(filePath); statsdataset.Clear(); statsdataset.ReadXml(txtReader); dataGridView1.DataSource = statsdataset; dataGridView1.DataMember = "stat"; // retourne le style lors du click sur le bouton de la page 1 this.dataGridViewStatStyle(); afficherStat = true; }
salut toopac, mon eternelle sauveur :D
c'est vrai que c'est encore mieux comme ça et ça donne envi de le lire au moins.
On s'y retrouve et s'est super homogène.
génial ça valait le coup de recommencer comme me l'a dit tomlev. Et finalement c'était pas si long.
De plus si j'ai recommencé c'était également pour repartir sur de bonne base concernant l'affichage vertical de mon dgv.
Je viens de réessayer avec le flip que j'ai utilisé auparavant mais je crois que cette methode n'est pas terrible.
Tu n'aurais pas une methode plus simple que la mienne, afin mettre ma page 1 vertical
ou une explication facile à comprendre.
merci d'avance
J'avais pas fait attention, mais dans timer_Tick tu peux encore factoriser :
Du coup si tu veux changer la façon de mettre à jour tes données, tu modifies le code qu'à un endroit (majStat ou majCom), plutôt que de chercher tous les endroits ou tu as fais du copier coller.Code:
1
2
3
4
5
6
7
8
9
10
11 private void timer1_Tick(object sender, EventArgs e) { if (afficherStat) { majStat(); } else { majCom(); } }
Sinon comment tu avais fait toi dans ton 'flip'?
tu me crois c'est ce que j'étai en train de faire hi hi......
alors pour le flip le voici
ensuite au chargement ou plutot maintenant dans majSat :Code:
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 private static DataTable GetStats() { //Initialisation de notre dataTable afin d'inverser DataTable table = new DataTable(); table.TableName = "stats"; table.Columns.Add("Chiffres d'Affaires", typeof(string)); table.Columns.Add("Prix Moyen Produit", typeof(string)); table.Columns.Add("Prix Moyen Commande", typeof(string)); table.Columns.Add("CA Moyen / Jour", typeof(string)); table.Columns.Add("CA / Mois", typeof(string)); table.Columns.Add("Nombres de Commandes", typeof(string)); table.Rows.Add(new object[] { "", "", "", "", "", "" }); table.AcceptChanges(); return table; } public DataSet FlipDataSet(DataSet my_DataSet) { // methode qui inverse notre dataTable DataSet ds = new DataSet(); foreach (DataTable dt in my_DataSet.Tables) { // DataTable table = new DataTable(); DataTable table = new DataTable(dt.TableName); for (int i = 0; i <= dt.Rows.Count; i++) { table.Columns.Add(Convert.ToString(i)); } DataRow r; for (int k = 0; k < dt.Columns.Count; k++) { r = table.NewRow(); r[0] = dt.Columns[k].ToString(); for (int j = 1; j <= dt.Rows.Count; j++) { r[j] = dt.Rows[j - 1][k]; } table.Rows.Add(r); } ds.Tables.Add(table); } return ds; }
et pour terminer je modifie la ligne suivante :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 //retourne la methode d'affichage vertical ds = new DataSet(); dt = new DataTable(); dt = GetStats(); ds.Tables.Add(dt); DataView my_DataView = ds.Tables[0].DefaultView; this.dataGridView1.DataSource = my_DataView; DataSet new_ds = FlipDataSet(ds); my_DataView = new_ds.Tables[0].DefaultView; this.dataGridView1.DataSource = my_DataView;
parCode:dataGridView1.DataSource = statsdataset;
et j'ai une erreur à la ligne suivante dans ma fonction dataGridViewStatStyle() :Code:dataGridView1.DataSource = FlipDataSet(statsdataset);
le message est :Code:dataGridView1.Columns["nb_utilisateur_newsletter"].Visible = false;
VoilàCitation:
La référence d'objet n'est pas définie à une instance d'un objet.
si tu 'pivotes ton datagrid', les lignes deviennent alors des colonnes et les colonnes des lignes.
Du coup tu ne peux plus accéder à une colonne comme tu le faisais avant vu que tu l'a transformé en ligne!
ah ben oui y'a rien de plus logique (maintenant que tu le dis biensur).
Donc comme je rend invisible une colonne qui devient une ligne, ça bug....
Ok je viens de comprendre quelque chose.
Mais dois-je du coup transformer toutes les colonnes codées comme ceci
et mettre à la placeCode:datagridview1.columns["id"].visible = false;
Ou en revanche y'a-t'il une autre solution car je ne suis vraiment pas sûr de ce que je viens dire.Code:datagridview1.rows["id"].visible = false;
je ne peux pas faire les tests là tout de suite.
J'attendrais demain matin.
Mais ton avis me serait plus qu'utile
merci toopac pour les explications
Du coup je me demande si c'est vraiment necessaire de supprimer les colonnes que je ne souhaites pas voir puisque lorsque je fais la fonction suivante :
j'initialise directement les colonnes que je souhaite voir.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 private static DataTable GetStats() { //Initialisation de notre dataTable afin d'inverser DataTable table = new DataTable(); table.TableName = "stats"; table.Columns.Add("ca", typeof(string)); table.Columns.Add("Prix Moyen Produit", typeof(string)); table.Columns.Add("Prix Moyen Commande", typeof(string)); table.Columns.Add("CA Moyen / Jour", typeof(string)); table.Columns.Add("CA / Mois", typeof(string)); table.Columns.Add("Nombres de Commandes", typeof(string)); table.Rows.Add(new object[]{}); table.AcceptChanges(); return table; }
Donc je pense pas qu'il soit utile de le faire. Car quand j'enlève le gros bloc de suppression de ligne ( que j'ai fais dans la fonction dataGridViewStatStyle() ) le résultat est le meme.
Par contre je constate qu'il est util pour l'affichage classique ( horizontal) que je ne souhaite pas.
De plus j'ai quand meme essayé de mettre ceci :
à la place de ceci :Code:dataGridView1.Rows[9].Visible = false;
Il n'y a plus d'erreur mais le dgv ne me charge toujours pas les valeurs ca_mois,Code:dataGridView1.Columns["nb_utilisateur_newsletter"].Visible = false;
nb_cmd, prix_moyen_cmd ........
et ainsi de suite pour les autres bien sur
Je vois pas trop ce que tu veux faire avec ton code.
Moi j'aurais plus fais un truc comme ça :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 private void majStats() { string filePath = "http://www.beautefrance.com:8080/script/widget_statsvente.php"; XmlTextReader txtReader = new XmlTextReader(filePath); DataSet statsdataset = new DataSet(); statsdataset.Clear(); statsdataset.ReadXml(txtReader); dataGridView1.DataSource = flip(statsdataset); dataGridView1.DataMember = "stat"; // retourne le style lors du click sur le bouton de la page 1 dataGridViewStatStyle(); }
Tu ne peux pas accéder à une ligne par son nom comme tu faisais avec les colonnes. Il n'y a pas de "header" pour les lignes. Donc les valeurs de ta première colonnes seront les titres, et les valeurs de la deuxième colonne, les valeurs correspondantes.Code:
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 private DataSet flip(DataSet dataSetToFlip) { DataSet ds = new DataSet(); foreach (DataTable dt in dataSetToFlip.Tables) { DataTable table = new DataTable(dt.TableName); table.Columns.Add("Titre"); for (int i = 1; i <= dt.Rows.Count; i++) { table.Columns.Add(Convert.ToString(i)); } DataRow r; for (int k = 0; k < dt.Columns.Count; k++) { r = table.NewRow(); r[0] = dt.Columns[k].ToString(); for (int j = 1; j <= dt.Rows.Count; j++) { r[j] = dt.Rows[j - 1][k]; } table.Rows.Add(r); } ds.Tables.Add(table); } return ds; }
Il te faut pour chaque tester la valeur de la cellule de la première colonne. Si c'est "nb_utilisateur_newsletter" par exemple, alors tu la rends non visible.
super toopac j'ai fait ton "flip" et ça marche
mais j'ai du également supprimer tout le code suivant :
j'ai bien mes valeurs qui s'affichent cette fois-ci.Code:
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 // rendre invisibles les colonnes suivantes dataGridView1.Columns["nb_utilisateur_newsletter"].Visible = false; dataGridView1.Columns["nb_utilisateur"].Visible = false; dataGridView1.Columns["nb_utilisateur_cmd"].Visible = false; dataGridView1.Columns["ca_1"].Visible = false; dataGridView1.Columns["ca_2"].Visible = false; dataGridView1.Columns["ca_3"].Visible = false; dataGridView1.Columns["ca_4"].Visible = false; dataGridView1.Columns["ca_5"].Visible = false; dataGridView1.Columns["ca_6"].Visible = false; dataGridView1.Columns["ca_7"].Visible = false; dataGridView1.Columns["ca_8"].Visible = false; dataGridView1.Columns["ca_9"].Visible = false; dataGridView1.Columns["ca_10"].Visible = false; dataGridView1.Columns["ca_11"].Visible = false; dataGridView1.Columns["ca_12"].Visible = false; dataGridView1.Columns["ca_12"].Visible = false; dataGridView1.Columns["ca_prec"].Visible = false; dataGridView1.Columns["ca_prec_1"].Visible = false; dataGridView1.Columns["ca_prec_2"].Visible = false; dataGridView1.Columns["ca_prec_3"].Visible = false; dataGridView1.Columns["ca_prec_4"].Visible = false; dataGridView1.Columns["ca_prec_5"].Visible = false; dataGridView1.Columns["ca_prec_6"].Visible = false; dataGridView1.Columns["ca_prec_7"].Visible = false; dataGridView1.Columns["ca_prec_8"].Visible = false; dataGridView1.Columns["ca_prec_9"].Visible = false; dataGridView1.Columns["ca_prec_10"].Visible = false; dataGridView1.Columns["ca_prec_11"].Visible = false; dataGridView1.Columns["ca_prec_12"].Visible = false; // modif des titres dataGridView1.Columns["ca"].HeaderText = "Chiffres d'Affaires"; dataGridView1.Columns["nb_cmd"].HeaderText = "Nombres de Commandes"; dataGridView1.Columns["ca_mois"].HeaderText = "CA / Mois"; dataGridView1.Columns["ca_moyenne_jour"].HeaderText = "CA Moyen / Jour"; dataGridView1.Columns["prix_moyen_cmd"].HeaderText = "Prix Moyen Commande"; dataGridView1.Columns["prix_moyen_produit"].HeaderText = "Prix Moyen Produit"
j'ai beaucoup plus de valeur du coup mais c'est pas très grave ça va etre facile a régler.
encore merci toopac