[C#] Accès au datagrid

Signaler
-
 Utilisateur anonyme -
Bounjour,

J'ai créé un DataGrid a partir d'un DataTable en mémoire.
Mon DataGrid contient 4 colonnes. Le but est que la 4ème colonne prenne la valeur de la 2eme * la valeur de la 3eme.

J'ai fait une fonction qui s'exécute dès que l'on change de colonne dans ma DataTable, le but étant que la 4eme colonne se remplise toute seule dès que la 2eme et la 3eme sont remplies.

private void dt_ColumnChanged(object sender, System.Data.DataColumnChangeEventArgs e)
{
  float total = (int)e.Row.ItemArray[1] * (float)e.Row.ItemArray[2];
  e.Row.ItemArray[3] = total;
}


La fonction se lance bien dès que je change de colonne mais ma valeur n'est pas mise a jour :sad)
Pourtant la valeur dans ma variable "total" est correcte.

J'ai aussi essayé ceci mais sans plus de résultat :

private void dt_ColumnChanged(object sender, System.Data.DataColumnChangeEventArgs e)
{
  float total = (int)e.Row.ItemArray[1] * (float)e.Row.ItemArray[2];
  e.Row.ItemArray.SetValue(total,3); 
}


Un peu d'aide serait la bienvenue :big)
Merci

5 réponses

Messages postés
233
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
25 octobre 2010

essai d'ajouter ta 4eme colonne à ta datatable (a la creation de ta table!):

DataColumn x = new DataColumn ("total", typeof (int));
x.Expression = "<nomdelaeuxiemecolonne> * <nomdelatroisiemecolonne>";
nomdetatable.Add(x);
Messages postés
656
Date d'inscription
mercredi 22 août 2001
Statut
Membre
Dernière intervention
11 mars 2005
13
ItemArray te renvoi un tableau contenant un copie de tous les éléments de la DataRow en cours.

Pour modifier la colonne 3 de ta e.Row, fait ainsi:
e.Row[3] = total;

bon courage mon frère :)
Messages postés
656
Date d'inscription
mercredi 22 août 2001
Statut
Membre
Dernière intervention
11 mars 2005
13
interessant comme technique, pour ceux qui testeraient est trouveraient une erreur à la compilation, pensez donc à enlever les < > autour des noms de colonnes :)

Merci, cela fonctionne comme tu le dis.
Enfin cela fonctionne quand je navigue à la souris dans mon datagrid, mais si je navigue avec la touche TAB, la valeur de ma cellule s'efface et redevient la valeur par défaut??? (n'importe quelle cellule, meme la premiere qui est un string). C'est tres bizarre je ne comprends pas??

La solution de Miltiades fonctionne aussi mais le champ se met a jour à la validation de la ligne (qd on commence l'encodage de la ligne suivante) alors que je voudrait une mise a jour dès que mes 2 colonnes concernées sont remplies.

Existe-t-il un évènement lancé quand on a modifié la valeur d'une cellule?

Le dernier problème qui se pose est que j'aimerais ficxer la largeur des colonnes de mon datagrid.

Est-ce possible car je n'ai vu cela nulle part?