AU SECOURS MON DATAGRID ME REND FOLLE

[Résolu]
Signaler
Messages postés
92
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
5 août 2009
-
Messages postés
92
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
5 août 2009
-
Salut , j'ai un gros soucis.
Jai un datagrid dans lequel je remplis les colonnes.
qd je quitte ce datagrid grace a l'evenement Leave j'enregistre toutes le donnees.
Seulement si jecris dans une case et que tout de suite apres je quitte le datagrid, il ne me reconnai la nouvelle valeur de cette case, mais plutot celle qui se trouvai avant la modification.
Par contre si j'ecris et qu'ensute je click au moins une fois dans ce meme datagrid alors la il me prend en compte cette derniere modif.
Je ne sais plus quoi faire, jai essaye de contrecarre mais je trouve pas de solution.
J'espere que j'ai ete assez claire. 

sandra

8 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Ok, je viens d'essayer a ta façon, et je n'ai pas le souci non plus
Je modifie la valeur d'un champ, je donne le focus a un autre controle, l'evenement Leave se declenche, la boucle update tous les champs dans la base de données, si je reload, les données modifiées sont là.
Cependant, je ne peut faire tourner ce code que sur le framework 2 a present (rien pour tester sur le 1.1)

Pour ce qui est de l'utilisation d'un Adapter, le probleme c'est que ca risque de chambouler tout ton code.

J'utilise un SqlDataAdapter, un SqlConnection, et un Dataset.
le DataSet.Tables[0] et bindé a mon Datagrid (propriété DataSource)

Imaginons ma Table : Table1 avec Field1, Field2 et Field3 (Field2 etant la
Mon adapter est déclaré ainsi :
<hr />this.adapter.SelectCommand =
new
SqlCommand(
"SELECT * FROM table1",
this.connection);

SqlCommand updateCommand =
new
SqlCommand(
"UPDATE table1 set field1 = @field1, field3=@field3 WHERE field2 = @field2",
this.connection);
updateCommand.Parameters.Add(
"@field1",
SqlDbType.NVarChar, 10,
"Field1");
updateCommand.Parameters.Add(
"@field2",
SqlDbType.Int, 10,
"Field2");
updateCommand.Parameters.Add(
"@field3",
SqlDbType.Bit, 1,
"Field3");

SqlCommand insertCommand =
new
SqlCommand(
"INSERT INTO table1(field1, field2, field3) values(@field1, @field2, @field3)",
this.connection);
insertCommand.Parameters.Add(
"@field1",
SqlDbType.NVarChar, 10,
"Field1");
insertCommand.Parameters.Add(
"@field2",
SqlDbType.Int, 10,
"Field2");
insertCommand.Parameters.Add(
"@field3",
SqlDbType.Bit, 1,
"Field3");

this.adapter.InsertCommand = insertCommand;

this.adapter.UpdateCommand = updateCommand;

dataSet =
new
DataSet();

<hr />
Pour charger les données, je procede ainsi :

<hr />this.dataSet.Clear();

this.adapter.Fill(dataSet);

this.datagrid.DataSource = dataSet.Tables[0];
<hr />
Pour sauver les données (dans l'evenement leave)

<hr />this.adapter.Update(ds.Tables[0]);

this.ds.AcceptChanges();

this.ds.Clear();

this.adapter.Fill(ds);
<hr />

Mx
MVP C# 
Messages postés
111
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
27 avril 2010

Autrement pour ne pas avoir a te retaper toutes les requetes INSERT etc, j'utilise cette méthode pour gérer ma DataGrid :



DbCommand



command = taConnexion.CreateCommand();

command.CommandText = requeteSQL;

DataAdapter
dataAdapter = createDbDataAdapter();
dataAdapter.SelectCommand = command;


DataTable
dataTable =

new



DataTable
();
dataAdapter.Fill(dataTable);


BindingSource
bindingSource =

new



BindingSource
();
bindingSource.DataSource = dataTable;



dataGridView.DataSource =

bindingSource;



A ce moment ta grid affiche les données brutes. A toi après de modifier le style d'affichage :)
Et pour sauvegarder :

dataAdapter.Update((
DataTable)bindingSource.DataSource);Voili voilou !!
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Salut

N'ayant jamais été confronté a ca, j'ai essayé de reproduire simplement ce probleme, mais je n'y suis pas arrivé.
Si ca se trouve, j'ai pas bien compris ^^

Enfin bref, tu peux nous envoyer les bouts de code incriminés, afin qu'on essaie de voir ce qui pourrait se passer ?

Mx
MVP C# 
Messages postés
92
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
5 août 2009

ben ya pas vraiment de bout de code.


c'est un tout.


En fait comme je l'ai explique grace a l'event leave j'enregistre mes donnee en utilisant


for(int i=0; i<datagrid.VisibleRow; i++)
{
int nb=convert.ToInt32(datagrid[i,0]);
string heure= datagrid[i,1].ToString();
bool vrai=convert.ToBoolean(datagrid[i,2]);

string Save="Insert ou Update into.....
}

mais si j'ai clique sur ma 3e colonne et que j'ai change le status de checked en non chekcked et que tout de suite apres je quitte le datagrid pour un autre control et bien le parametre 'vrai' ne prend pas en compte la nouvelle valeur
Il en est de meme si c'est les heures que je change en dernier, ect...
mais si par contre je clik au moins une fois sur une cellule que je ne modifie pas alors ca marche

sandra
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Erf, en fait j'avais essayé en pensant que tu utilisais un Adapter, et de cette façon ca marchait.
Si j'ai le temps, je regarderais avec ta méthode.

Si quelqu'un d'autre passe par la entre-temps, qu'il ne se gene pas

Mx
MVP C# 
Messages postés
92
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
5 août 2009

comment  fais tu avec un adapter?
peut etre quil est preferable que je change cette partie de mon code

sandra
Messages postés
111
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
27 avril 2010

Salut !
Si tu ne veux pas toucher à ton code, dans le leave met :

taGrid.EndEdit();

et enregistre ensuite.

Sinon si tu utilise une base de données, c'est peut -etre plus propre de faire la solution du DataAdapter. Enfin c'est celle que j'utilise perso :)
Messages postés
92
Date d'inscription
mercredi 5 juillet 2006
Statut
Membre
Dernière intervention
5 août 2009

Je vous remerci de vos reponses, elle m'ont bcp apporte.
J'ai reverifie mon code, meme si je ne vois pas d'erreur je suis sure que c'est moi qui doit faire une manip a un moment donne.
En tout cas merci de vos aides, au moins ca maura permit de comprendre que ce n'est pas le datagrid qui pose probleme...

sandra