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

Signaler
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
-
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010
-
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

Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
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.
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
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
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
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...
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
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
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
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
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
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 ???
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
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
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
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
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
Ha oui effectivement si ta datagridview est bound a un datatable, ma technique ne fonctionne pas ;o
Messages postés
39
Date d'inscription
vendredi 5 octobre 2007
Statut
Membre
Dernière intervention
27 mars 2009
1
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 :-)
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010

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.
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
39
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 -
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010

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)
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
39
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 -
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010

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!!!!!
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
39
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 -
Messages postés
6
Date d'inscription
samedi 24 octobre 2009
Statut
Membre
Dernière intervention
6 février 2010

merci Mr!!
ça marche!!!