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

cs_MoKaLux Messages postés 39 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 27 mars 2009 - 12 janv. 2009 à 00:20
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.

17 réponses

bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
12 janv. 2009 à 23:50
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.
1
cs_MoKaLux Messages postés 39 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 27 mars 2009 1
13 janv. 2009 à 20:56
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
0
cs_MoKaLux Messages postés 39 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 27 mars 2009 1
13 janv. 2009 à 21:05
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...
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
13 janv. 2009 à 21:21
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MoKaLux Messages postés 39 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 27 mars 2009 1
13 janv. 2009 à 23:19
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
0
cs_MoKaLux Messages postés 39 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 27 mars 2009 1
13 janv. 2009 à 23:36
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 ???
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
13 janv. 2009 à 23:57
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
0
cs_MoKaLux Messages postés 39 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 27 mars 2009 1
14 janv. 2009 à 00:16
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
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
14 janv. 2009 à 09:00
Ha oui effectivement si ta datagridview est bound a un datatable, ma technique ne fonctionne pas ;o
0
cs_MoKaLux Messages postés 39 Date d'inscription vendredi 5 octobre 2007 Statut Membre Dernière intervention 27 mars 2009 1
14 janv. 2009 à 20:33
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 :-)
0
cs_wafa59 Messages postés 6 Date d'inscription samedi 24 octobre 2009 Statut Membre Dernière intervention 6 février 2010
26 déc. 2009 à 18:22
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.
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
28 déc. 2009 à 11:51
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 -
0
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 à 13:50
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)
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
28 déc. 2009 à 15:22
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 -
0
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 à 16:51
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!!!!!
0
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
28 déc. 2009 à 18:34
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 -
0
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
merci Mr!!
ça marche!!!
0
Rejoignez-nous