Comment changer la valeur d'une cellule dans un datagridview selon la valeur d'u

Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
- - Dernière réponse : cs_wafa59
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010
- 28 déc. 2009 à 21:23
Bonjour,
J'essaie de modifier/changer la valeur d'une cellule dans un datagridview selon la valeur d'une autre cellule du même datagridview.
Dans mon cas je voudrais que les cellules de la 5ème colonne soient divisées par 100 si les cellules de la 2ème colonne finissent par le texte LN.

Cela devrait être très simple mais je tourne en rond depuis trop longtemps maintenant.
Des pistes SVP.

mon code :

var anglaises =
from anglaise
in toutExcel.ToList()

where anglaise.myticker.EndsWith(
"LN") ==
true

select
new{

cours = anglaise.mycourspyc

};

Là ça ne marche pas du tout car j'applique un filtre donc toutes les autres données sont eliminées.
J'ai essayé avec un IF mais il me dit que je peux pas changer les données (readonly)...
Avec un foreach pareil, je galère grave.

Merci de m'aider.
Afficher la suite 

17 réponses

Meilleure réponse
Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
1
Merci
for(int i=0; i<dgv.Rows.Count;i++)
{
   if(  ((string)dgv.Rows[i].Cells[1].Value).EndsWith("LN") )
   {
       ((float)dgv.Rows[i].Cells[4].Value) /= 100.0f;
    }
}

Si ta 5eme colonne est de type float.

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 189 internautes nous ont dit merci ce mois-ci

Commenter la réponse de bubbathemaster
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
0
Merci
Merci te ta réponse très rapide.
Je me suis empressé d'essayer ton code, magnifique mais j'ai un message d'erreur :-(

((float)dgv.Rows[i].Cells[4].Value) /= 100.0f;

Error 1 The left-hand side of an assignment must be a variable, property or indexer

Je vais essayer de trouver mais au cas où tu saurais le pb merci...

Sincèrement
Commenter la réponse de cs_MoKaLux
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
0
Merci
J'étais arrivé avec un autre code :



var

toutExcel =


from

cellules


in

fichierExcel.AsEnumerable()
                           


select





new
                           

{
                                 

myticker = cellules.Field<


string

>(fichierExcel.Columns[2]),


                                 mycourspyc = cellules.Field<


double

>(fichierExcel.Columns[9])


                           };





foreach

(


var

ang


in

toutExcel.Where(a => a.myticker.EndsWith(


"LN"

)))
{
      




ang.mycourspyc = ang.mycourspyc / 100;




}


J'aurais tant aimé que cela marche direct mais malheureusement g l'erreur:
Cannot change ang.mycourspyc because it is read-only.

J'ai essayé de faire datagridview.readonly = false; ...

Mais non.

Je vais reregarder ton code...
Commenter la réponse de cs_MoKaLux
Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
0
Merci
Je sais pas j'ai pas compilé le code, juste tappé à l'arrache. S'il veut pas de ça, tu peux faire:

float f = (float)dgv.Rows[i].Cells[4].Value;
dgv.Rows[i].Cells[4].Value = f / 100.0f;

Il serait parfois bon de lacher tous ces trucs de très haut niveau comme linq pour revenir aux bases hein ;o
Commenter la réponse de bubbathemaster
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
0
Merci
Wouah t trop cool, je vais tester encore avec ta nouvelle piste.
A propos de linq c vraiment pratique comme tout et les pauvres gens qui font csharp se decarcassent vraiment donc c la moindre des choses que de se servir de leur nouveauté...

A plus et bonne soirée
Commenter la réponse de cs_MoKaLux
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
0
Merci
mon prog compile avec ta nouvelle soluce mais je n'ai pas le resultat souhaité, mais merci j'avance, j'avance.

Juste un truc en fait j'ai pas des FLOAT g d DOUBLE

dois-je remplacer ???
Commenter la réponse de cs_MoKaLux
Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
0
Merci
Bien sur, j'ai mis float en supposant que tes nombres étaient des float. Si tu traite des double, alors fais tout avec des doubles, ie:
double d = (double)dgv.Rows[i].Cells[4].Value;
dgv.Rows[i].Cells[4].Value = d / 100.0;

Ca ne peut que marcher :p
Commenter la réponse de bubbathemaster
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
0
Merci
ok ça marche de mieux en mieux mais je ne vois pas les changements dans ma datagridview à l'écran. Peut-être que ça marche mais je le vois pas.

En tout cas c vrai avec ta nouvelle façon ça à l'air de marcher.

J'ai mis ton code avant et ensuite après le code de la datagridview mais pas de changement :-(

Je crois que le pb est que je remplis mon dgc avec un dataset (un tableau excel) et que les données ne peuvent pas être modifiées par programmation dans la dgv ?!? c du read only.

Ah la la... merci en tout cas pour ton aide, je continue de continuer d'essayer de faire que ça marche...

merci
Commenter la réponse de cs_MoKaLux
Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
0
Merci
Ha oui effectivement si ta datagridview est bound a un datatable, ma technique ne fonctionne pas ;o
Commenter la réponse de bubbathemaster
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
0
Merci
Merci quand même t vraiment cool d'avoir essayé. Penses-tu à une autre piste Mister ? pardon bubbathemaster... :-)

J'espère poster la réponse bientôt :-|

Je suis ouvert à toutes solutions possible :-)
Commenter la réponse de cs_MoKaLux
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010
0
Merci
j'arrive pas à afficher mon datagridview
j'utilise cette instruction:
v.Rows[i].Cells[j].Value = image_matric[i, j];
tq v est un dtagridview
et imag_matric est une matrice bien déclarée et bien définie
l'éxécution m'affiche un dtagridview dont les valeurs des cellules sont irronée.
Commenter la réponse de cs_wafa59
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
28
0
Merci
Bonjour wafa59
La prochaine fois, merci de faire ton propre post.
Tu dis que les valeurs sont erronées : quelles sont leurs valeurs ?

Krimog : while (!(succeed = try())) ;
- Mes bonnes résolutions 2010 : 1680x1050 et 1920x1080 -
Commenter la réponse de krimog
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010
0
Merci
vous me semblez un pe méchant mais bn!!
les valeurs éronnéée pour moi ne sont pas les valeurs k je veux afficher cest à dire les élements de la matrice.
on m'affiche un truc du genre : form1. cor ( cor est une structure k j'ai défini)
Commenter la réponse de cs_wafa59
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
28
0
Merci
Je suis peut-être un peu méchant (attention, je mords), mais ta question n'est absolument pas en relation directe avec "comment changer la valeur d'une cellule dans un datagridview selon la valeur d'une autre cellule du même datagridview avec linq".

Pour revenir à ton problème, quel est le type (avec le namespace) des éléments de ta matrice ? Ne serait-ce pas justement Form1.cor ?

Krimog : while (!(succeed = try())) ;
- Mes bonnes résolutions 2010 : 1680x1050 et 1920x1080 -
Commenter la réponse de krimog
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010
0
Merci
NN, vous ne mordez pas, je sais k au fond vous etes gentil ;).
oui le cor est le type des éléments de la matrice, mais moi je ne ve pas afficher le type, je veux afficher une valeur ( un champ de la structure de cor)
merci d'avance Mr et bonne année à l'avance!!!!!
Commenter la réponse de cs_wafa59
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
28
0
Merci
v.Rows[i].Cells[j].Value est un string. Si on lui transmet un objet qui n'est pas un string, c'est la méthode ToString() de l'objet qui est appelée. Or, par défaut, la méthode ToString() renvoie le type de ton objet.

C'est donc ce qu'il se passe dans ton cas.

Si tu veux afficher le champ "monChamp" de ta structure cor, il suffit simplement de faire
v.Rows[i].Cells[j].Value = image_matric[i, j].monChamp;

à condition que monChamp soit un string ou que l'affichage de monChamp.ToString() te convienne.

Krimog : while (!(succeed = try())) ;
- Mes bonnes résolutions 2010 : 1680x1050 et 1920x1080 -
Commenter la réponse de krimog
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010
0
Merci
merci Mr!!
ça marche!!!
Commenter la réponse de cs_wafa59