Datagridview, la colonne qui change
L'éternel étudiant
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je n'arrive pas à comprendre, quand je lance ma commande la première fois ça marche. Mais la deuxième fois le calcule : "DataGridView1.Item(Col, row).Value" se fait dans la colonne précédente et quand je remplace "col" par le titre de la colonne rien ne se passe même la première fois. Une explication ? Parce que la j'ai beau chercher je coince.
Cordialement.
je n'arrive pas à comprendre, quand je lance ma commande la première fois ça marche. Mais la deuxième fois le calcule : "DataGridView1.Item(Col, row).Value" se fait dans la colonne précédente et quand je remplace "col" par le titre de la colonne rien ne se passe même la première fois. Une explication ? Parce que la j'ai beau chercher je coince.
Dim ds As DataSet = SQLrécupération("SELECT TableClient.Nom, TableFacture.Date, TableFacture.NumFacture, TableMO.Temps, TableMO.Prix AS PrixMO, Tablecontenu.Intitule, Tablecontenu.Quantite, TableContenu.Prix
FROM TableFacture, TableClient, TableMO, Tablecontenu
WHERE TableFacture.PersonneID = TableClient.PersonneID
AND TableFacture.MOID = TableMO.MOID
AND Tablefacture.ContenuID = TableContenu.ContenuID
;")
DataGridView1.DataSource = ds.Tables(0)
'Ajout d'un total HT dans le datagrid
If DataGridView1.ColumnCount = 8 Then
DataGridView1.Columns.Add(8, "Total")
End If
Dim Col As Integer = DataGridView1.ColumnCount - 1
For row As Integer = 0 To DataGridView1.RowCount - 2
DataGridView1.Item(Col, row).Value =
CDec(DataGridView1.Item("Temps", row).Value) * CDec(DataGridView1.Item("PrixMO", row).Value) + CDec(DataGridView1.Item("Quantite", row).Value) * CDec(DataGridView1.Item("Prix", row).Value)
Next
Cordialement.
A voir également:
- Datagridview, la colonne qui change
- Déplacer colonne excel - Guide
- Change dns - Guide
- Trier colonne excel - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
2 réponses
Bonsoir
je ne travaille pas avec des bases de données, donc les subtilités avec les dataset m'échappent.
Par contre le datagridview, je gère, et ça n'est pas fait pour faire des calculs.
Ça n'est ni pratique, ni performant.
Pour additionner deux produits ça te prend 4 conversions de type, et autant de sélections d'item.
En plus tu commences par binder la grille sur le dataset (ce qui est la bonne utilisation) puis tu ajoutes une colonne à la main, et tu faits tes calculs (c'est là que ça merdoit à mon avis).
Si tu écris une classe, dont chaque propriétés est une colonne du datagridview final (y compris le résultat). Les données numériques seront converties une fois pour toute à l'initialisation.
La propriété Resultat sera en lecture seule et retournera ton calcul avec les 4 propriétés qui vont bien.
Tu charges une listeOf() de cette classe via ton dataset ou linqToSql. Tu bindes cette liste.
Pour le binding, tu peux utiliser cette méthode
https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
je ne travaille pas avec des bases de données, donc les subtilités avec les dataset m'échappent.
Par contre le datagridview, je gère, et ça n'est pas fait pour faire des calculs.
Ça n'est ni pratique, ni performant.
Pour additionner deux produits ça te prend 4 conversions de type, et autant de sélections d'item.
En plus tu commences par binder la grille sur le dataset (ce qui est la bonne utilisation) puis tu ajoutes une colonne à la main, et tu faits tes calculs (c'est là que ça merdoit à mon avis).
Si tu écris une classe, dont chaque propriétés est une colonne du datagridview final (y compris le résultat). Les données numériques seront converties une fois pour toute à l'initialisation.
La propriété Resultat sera en lecture seule et retournera ton calcul avec les 4 propriétés qui vont bien.
Tu charges une listeOf() de cette classe via ton dataset ou linqToSql. Tu bindes cette liste.
Pour le binding, tu peux utiliser cette méthode
https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
J'ai trouvé beaucoup plus simple en cherchant un peu sur des méthode différente pour arriver a mon résultat:
Dim ds As DataSet = SQLrécupération("SELECT TableClient.Nom, TableFacture.Date, TableFacture.NumFacture, TableMO.Temps, TableMO.Prix AS PrixMO, Tablecontenu.Intitule, Tablecontenu.Quantite, TableContenu.Prix, TableMO.Temps * TableMO.Prix + Tablecontenu.Quantite * TableContenu.Prix AS TOTALHT
FROM TableFacture, TableClient, TableMO, Tablecontenu
WHERE TableFacture.PersonneID = TableClient.PersonneID
AND TableFacture.MOID = TableMO.MOID
AND Tablefacture.ContenuID = TableContenu.ContenuID
;")
DataGridView1.DataSource = ds.Tables(0)