Bonjour,
Je suis entrain de faire un petit soft de gestion des ventes / du stock et j'aimerai savoir comment je pourrais faire un datacolumn qui calcule la moyenne des cellules de la ligne...
merci d'avance à tous les forumeurs!
Version imprimable
Bonjour,
Je suis entrain de faire un petit soft de gestion des ventes / du stock et j'aimerai savoir comment je pourrais faire un datacolumn qui calcule la moyenne des cellules de la ligne...
merci d'avance à tous les forumeurs!
Code:
1
2
3
4
5
6
7 For Each row As DataGridViewRow In taDGV.Rows Dim total As Double For Each cell As DataGridViewCell In row.Cells total += cell.Value Next row.Cells("ColumnResultat").Value = total / row.Cells.Count Next
merci!
mais j'ai un petit soucis: j'ai cette erreur:
et comment fait-on pour lui dire de calculer sur les colones 2 à 5 (3° à 6°)?Citation:
"L'opérateur '+' n'est pas défini pour type 'Double' et type 'DBNull'."
encore merci!
Essayes comme ça :
Code:
1
2
3
4
5
6
7
8
9
10 For Each row As DataGridViewRow In taDGV.Rows Dim total As Double For Each cell As DataGridViewCell In row.Cells If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then If Not IsDBNull(cell.Value) Then total += cell.Value End If Next row.Cells("ColumnResultat").Value = total / 4 Next
merci mais j'ai encore un soucis (padouwé, je sais...)
ça à l'air de fonctionner jusqu'au moment ou il faut mettre dans la colonne, il me dit que la colonne n'existe pas...
j'ai essayé avec une datacolumn et avec une colonne que j'ai mis dans la table de la bdd...
mais si au lieu du nom de la colonne je marque son numéro, cela fonctionne mais la moyenne est juste seulement pour la première colonne
( si je mets 2 partout, moyenne de 2 sur la première ligne, 4 sur la seconde, 6 sur la troisième...)
Et tu as une colonne nomméee "ColumnResultat" dans ton DGV "taDGV" ?
Peut-on voir ton code, y compris le designer du DGV ?
Attention la casse est importante
http://imageshack.us/photo/my-images...tagridview.jpgCode:
1
2
3
4
5
6
7
8
9
10
11
12 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For Each row As DataGridViewRow In TestDataGridView.Rows Dim total As Double For Each cell As DataGridViewCell In row.Cells If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then If Not IsDBNull(cell.Value) Then total += cell.Value End If Next row.Cells("moy").Value = total / 4 Next End Sub
voilà...
bon faut pas faire attention à l'intitulé des autres colonnes, si je te demandais de 2 à 5, c'était juste pour savoir comment on fait...
à ce propos, cellcount fonctionne aussi dans ce mode? parce que les ventes sont rentrées tous les jours et si on est au 2° jour et qu'on divise par 4 (exemple), cela n'est pas juste...
je crois que je vais devoir faire un compteur pour toutes les cellules qui ne sont pas égales à null et dire de diviser par la variable de ce compteur
encore merci de m'aider!
Et oui apriori le cellcount marcheCitation:
y compris le designer du DGV
c'est pas l'image que j'ai mis en lien? connais pas super bien la terminologie...
ou c'est le dataset que tu veux voir?
ptet la modif des colonnes:
http://img163.imageshack.us/img163/3...idview2.th.jpg
Tu affiches tous les fichiers dans l'explorateur de solutions :
http://i47.servimg.com/u/f47/11/97/62/38/sans_t13.jpg
Tu ouvre le fichier designer :
http://i47.servimg.com/u/f47/11/97/62/38/sans_t12.jpg
Tu cherches la déclaration du datagridview et tu me colles ça ici
c'est ça?
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 'TestDataGridView ' Me.TestDataGridView.AutoGenerateColumns = False Me.TestDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.TestDataGridView.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.DataGridViewTextBoxColumn1, Me.DataGridViewTextBoxColumn2, Me.DataGridViewTextBoxColumn3, Me.DataGridViewTextBoxColumn4, Me.DataGridViewTextBoxColumn5, Me.DataGridViewTextBoxColumn6, Me.DataGridViewTextBoxColumn7}) Me.TestDataGridView.DataSource = Me.TestBindingSource Me.TestDataGridView.Location = New System.Drawing.Point(24, 84) Me.TestDataGridView.Name = "TestDataGridView" Me.TestDataGridView.Size = New System.Drawing.Size(811, 442) Me.TestDataGridView.TabIndex = 3 ' 'DataGridViewTextBoxColumn1 ' Me.DataGridViewTextBoxColumn1.DataPropertyName = "ref" Me.DataGridViewTextBoxColumn1.HeaderText = "ref" Me.DataGridViewTextBoxColumn1.Name = "DataGridViewTextBoxColumn1" ' 'DataGridViewTextBoxColumn2 ' Me.DataGridViewTextBoxColumn2.DataPropertyName = "1" Me.DataGridViewTextBoxColumn2.HeaderText = "1" Me.DataGridViewTextBoxColumn2.Name = "DataGridViewTextBoxColumn2" ' 'DataGridViewTextBoxColumn3 ' Me.DataGridViewTextBoxColumn3.DataPropertyName = "2" Me.DataGridViewTextBoxColumn3.HeaderText = "2" Me.DataGridViewTextBoxColumn3.Name = "DataGridViewTextBoxColumn3" ' 'DataGridViewTextBoxColumn4 ' Me.DataGridViewTextBoxColumn4.DataPropertyName = "3" Me.DataGridViewTextBoxColumn4.HeaderText = "3" Me.DataGridViewTextBoxColumn4.Name = "DataGridViewTextBoxColumn4" ' 'DataGridViewTextBoxColumn5 ' Me.DataGridViewTextBoxColumn5.DataPropertyName = "4" Me.DataGridViewTextBoxColumn5.HeaderText = "4" Me.DataGridViewTextBoxColumn5.Name = "DataGridViewTextBoxColumn5" ' 'DataGridViewTextBoxColumn6 ' Me.DataGridViewTextBoxColumn6.DataPropertyName = "5" Me.DataGridViewTextBoxColumn6.HeaderText = "5" Me.DataGridViewTextBoxColumn6.Name = "DataGridViewTextBoxColumn6" ' 'DataGridViewTextBoxColumn7 ' Me.DataGridViewTextBoxColumn7.DataPropertyName = "moy" Me.DataGridViewTextBoxColumn7.HeaderText = "moy" Me.DataGridViewTextBoxColumn7.Name = "DataGridViewTextBoxColumn7"
et voilà ...
C'est ça le nom de ta colonne, moy c'est juste l'affichage ...Code:Me.DataGridViewTextBoxColumn7.Name = "DataGridViewTextBoxColumn7"
je me suis fait avoir par le mode graphique qui indiquait name: moy (sur la 2° capture d'écran..) mais c'est datapropertyname...
merci!
autrement, tu aurais une idée pour le fait que la moyenne passe automatiquement à la ligne d'après? (comme j'expliquais plus haut, si je mets 2 partout sur 3 lignes, la moyenne est : 2 sur la 1° ligne, 4 sur la 2° ligne et 6 sur la 3° ligne...)
La c'est plus une question de logique qu'un problème de programmation, à toi donc d'y réfléchir.
ok, je vais encore essayer de trouver ce qu'il se passe...
alors, j'ai trouvé une solution qui doit pas être la plus belle:
(la première partie est le compteur qui retire les cellules vides pour permettre de faire le calcul de la moyenne en divisant par le nombre de ventes)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 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For Each row As DataGridViewRow In TestDataGridView.Rows Dim compt As Double For Each cell As DataGridViewCell In row.Cells If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then If Not IsDBNull(cell.Value) Then compt += 1 End If Next row.Cells(0).Value = compt compt = 0 Next For Each row As DataGridViewRow In TestDataGridView.Rows Dim total As Double For Each cell As DataGridViewCell In row.Cells If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then If Not IsDBNull(cell.Value) Then total += cell.Value End If Next row.Cells(6).Value = total / row.Cells(0).Value total = 0 Next End Sub
donc, avant que l'on rentre des données, le compt et la moyenne contiennent un nombre (je n'ai pas encore compris d'où il vient) mais lorsque l'on rentre les ventes, le compt et la moyenne sont modifiés par les corrects.
sans que je ne change quoi que ce soit, maintenant, ça indique tjs les bons chiffres...
merci énormément de votre aide!