AU SECOURS MON DATAGRID ME REND FOLLE

Résolu
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009 - 27 sept. 2006 à 20:16
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009 - 5 oct. 2006 à 13:42
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

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
28 sept. 2006 à 11:29
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# 
3
cs_kurky Messages postés 111 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 27 avril 2010
28 sept. 2006 à 17:18
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 !!
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
27 sept. 2006 à 21:14
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# 
0
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009
27 sept. 2006 à 22:24
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
0

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

Posez votre question
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
28 sept. 2006 à 09:37
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# 
0
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009
28 sept. 2006 à 10:43
comment  fais tu avec un adapter?
peut etre quil est preferable que je change cette partie de mon code

sandra
0
cs_kurky Messages postés 111 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 27 avril 2010
28 sept. 2006 à 17:09
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 :)
0
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009
5 oct. 2006 à 13:42
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
0
Rejoignez-nous