2009-01-29 5 views
0

J'ai un contrôle DataGridView dans une application Winforms sur laquelle je travaille.Rétablissement des modifications dans DataGridView?

Le DataSource est mis à IQueryable que je reçois de notre couche de service:

dataGridView1.DataSource = (from c in _customerService.GetAll() select c); 

Dans l'exemple, je travaille, j'ai un bouton d'annulation que je souhaite utiliser pour annuler les modifications. Si elles frappent annuler, je n'appelle pas DataContext.SubmitChanges() et je ferme le formulaire. Toutefois, lorsque je rouvre le formulaire, les données affichées dans le DataGridView reflètent les modifications que j'ai apportées sur le formulaire précédent avant d'annuler annuler. Lorsque je ferme le programme et le réexécute, tout va bien. Donc, je crois que je suis en train de changer les données de la collection qui est liée à DataGridView.

Il y a sûrement une solution évidente à cela et mon ignorance de WinForms montre (ce qui est mon premier coup de couteau à WinForms quoi que ce soit.)

Toutes les suggestions de reversion des modifications à un datagridview?

Merci pour l'aide!

Ian

Répondre

0

Je crois que vous devez frapper à nouveau la base de données pour récupérer les données. Par exemple, si vous détectez que l'utilisateur a décidé d'annuler ses modifications, vous devrez revenir à la base de données et obtenir un nouveau IQueryable. En raison du fonctionnement de Linq to Sql, vous ne pouvez énumérer la collection qu'une seule fois. Par conséquent, si vous souhaitez simplement revenir aux modifications, vous ne pouvez pas le faire car il ne peut pas l'énumérer à nouveau.

Personnellement, je n'utiliserais probablement pas le DataGridView pour permettre à l'utilisateur de faire les changements directement. J'ai toujours senti que je contrôlais moins de cette façon. J'aurais probablement une sorte de formulaire de saisie où l'utilisateur peut entrer de nouvelles données ou éditer des enregistrements existants, plutôt que de leur donner la possibilité de modifier directement la grille qui édite directement la base de données.

Questions connexes