DataGridView et Linq [WinForms]: Probleme de refresh

testpresta Messages postés 13 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 26 janvier 2009 - 20 janv. 2009 à 08:51
testpresta Messages postés 13 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 26 janvier 2009 - 20 janv. 2009 à 18:50
Bonjour à toutes et à tous !

Je viens de faire une application winforms toute simple en c#:

- J'ai créé une base de données sql server (fichier mdf)
- J'ai créé les classes linq
- J'ai placé un composant datagridview sur ma form
- enfin, j'ai placé le code suivant afin de pouvoir alimenter mon datagridview en données:
MonDataGridView.DataSource db.MaTable.Where(c> (c.champ1=="test"));

Lorsque ce code est exécuté une première fois, il n'y a pas de problème, le datagridview est bien remplit.
Le problème c'est si je modifie les données depuis une autre form et que je ré execute ce code: Les données ne sont pas à jour.
J'ai l'impression que le datagridview met en cache certaines données et je voudrais savoir comment faire pour forcer le datagridview a vider son cache.
Pour info, j'ai déjà essayé plein de choses, appeller update, refresh, avant ou après l'affectation de la datasource et cela ne fonctionnait pas.

D'avance un grand merci pour vos réponses !

11 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
20 janv. 2009 à 09:21
salut

il manque le tolist c'est un enumerable sans cette methode

db.MaTable.Where(c => (c.champ1=="test")).ToList();
0
testpresta Messages postés 13 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 26 janvier 2009
20 janv. 2009 à 12:41
Merci pour ta réponse mais cela ne fonctionnne pas.
En fait le problème ne vient pas de linq. C'est purement un problème au niveau du datagridview qui fait une sorte de cache...

Merci quand même
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
20 janv. 2009 à 13:08
Ok, j'avais pas lu la fin de ton post.

Il faut refaire la source (reload de ta source ou modifier la source)

Comment tu fais le update, c'est pas sur la datagridview qu'il faut le refresh mais la datasource de ce dernier.
0
testpresta Messages postés 13 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 26 janvier 2009
20 janv. 2009 à 16:39
Que veux tu dire par faire le refresh sur la datasource du gridview ?

MonGridView.datasource.refresh ?
0

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

Posez votre question
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
20 janv. 2009 à 16:42
Non
Mondatagridview.datasource = masource de donnees.
0
testpresta Messages postés 13 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 26 janvier 2009
20 janv. 2009 à 17:17
ah ok lol !

Mais ça je le fait déjà du début (cf mon premier post:
MonDataGridView.DataSource db.MaTable.Where(c> (c.champ1=="test"));
0
testpresta Messages postés 13 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 26 janvier 2009
20 janv. 2009 à 17:18
enfin je veux dire que le code:
MonDataGridView.DataSource db.MaTable.Where(c> (c.champ1=="test"));

est appellé systématiquement a chaque besoin de refresh
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
20 janv. 2009 à 17:34
Il faut refaire le rebind je pense.
0
testpresta Messages postés 13 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 26 janvier 2009
20 janv. 2009 à 17:51
Pareil, c'est quoi que tu appelles le rebind précisement dans ce cas la ?
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
20 janv. 2009 à 18:08
Comment tu modifies les données.

Mais le code de modification des données STP
0
testpresta Messages postés 13 Date d'inscription dimanche 27 mai 2007 Statut Membre Dernière intervention 26 janvier 2009
20 janv. 2009 à 18:50
En fait en reprenant le problème depuis le départ, j'ai l'impression que le problème ne vient pas de la datagridview mais de linq.


Je vais te donner ci dessous le code, mais avant, j'aurais du te le préciser, en fait j'ai deux formulaires (winform):


- un qui contient la datagridview
- un qui contient les données pour les consulter ou les modifier quand on double clic sur une ligne dans le datagridview.


Voici le code:


- 1ere form (contient uniquement un datagridview dont le nom est dg1)


ce code est executé dans Form_Load:


dg1.datasource=db.MaTable1.Where(c => (c.critere == 1));


 


ce code est executé quand on double clic sur un row du datagridview:


var q = dg1.SelectedRows[0].DataBoundItem;
Form2 f = new Form2();
f.ouvrir((q as MaTable1).Id);


dg1.datasource=db.MaTable1.Where(c => (c.critere == 1));

- 2eme form (Form2):
Il y a des champs textes dessus et un bouton ok en bas:


Dans la methode ouvrir:
 public void ouvrir(int p_id)
        {
  _id=p_id;
  var obj = from c in db.MaTable1 where c.Id== p_id select c;




         textBox_nom.Text = obj.First().Nom;
             ...


  ShowDialog();
 }


Lorsque l'on clic sur le bouton ok:


 private void button_ok_Click(object sender, EventArgs e)
        {
            var obj = from c in db.MaTable1 where c.Id== _id select c;
            obj.Nom = textBox_nom.Text;
            ...
            db.SubmitChanges();


            Close();
        }
              
          


 
0