Datagridview, la colonne qui change

L'éternel étudiant -  
 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.

 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

Utilisateur anonyme
 
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
 
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
Utilisateur anonyme
 
Ce qui revient à ce que je te proposais mais dans la requête sql....
0