Datagridview, la colonne qui change

Fermé
L'éternel étudiant - Modifié par L'éternel étudiant le 4/04/2016 à 14:13
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 - 5 avril 2016 à 17:28
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.

 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:

2 réponses

Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 931
4 avril 2016 à 21:52
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


0
L'éternel étudiant
5 avril 2016 à 13:55
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)
0
Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 931
5 avril 2016 à 17:28
Ce qui revient à ce que je te proposais mais dans la requête sql....
0