Problème databinding twoways

premiumbfd Messages postés 29 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 17 juillet 2011 - 17 juil. 2011 à 10:03
premiumbfd Messages postés 29 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 17 juillet 2011 - 17 juil. 2011 à 18:52
Bonjour,

Je développe une application WPF en 3 couches :
1. mon xaml et .cs
2. mes classes
3. mon modèle entity

J'ai intégré une datagrid, avec par exemple une colonne pour le nom :
<DataGridTextColumn Header="Nom" Binding="{Binding Nom, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="200"></DataGridTextColumn>

Cette datagrid a un bouton qui permet d'enregistrer les modifications.

Ma classe métier CClient hérite d'une classe abstraite qui implémente INotifyPropertyChanged.

Lorsqu'on clic sur le bouton d'enregistrement, j'appelle la méthode de modification dans la base de données. Ca recharge bien la page avec les bonnes données, mais dans la base nous n'avons aucune modification.

Qu'est ce que je n'ai pas compris dans l'histoire ?

Merci de votre aide

2 réponses

Whismeril Messages postés 19029 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 26 avril 2024 656
17 juil. 2011 à 10:51
Bonjour,

je ne fais de WPF, alors je réponds peut être à coté.
En WinForm, pour binder il faut que la propriété Nom de ta classe soit défini avec get et set, sinon ça bug. Je suppose qu'en WPF aussi et que tu l'as fait.
Au moment de l'enregistrement si ta base de données est un fichier xml, il faut le sérializer entiérement, pour acces il faut faire un requete Update :
UPDATE MaTable SET 'MonChamp1 valeur1', 'MonChamp2 valeur2' WHERE (UniqueID = 'valeurIdUnique')
ou quelque chose comme ça. Une fois la requête exécutée, ta DB est mise à jour.
Pour sqlserver ou oracle je ne connais pas, mais je pense que c'est le même principe.
Tu peux récupérer la liste des UniqueID, que tu as modifié grâce à une méthode abonnée à "PropertyChanged" de INotifyPropertyChanged.

A la fin recharger ta DB, ne sert qu'à vérifier que tes modifs ont eu lieu.

J'espère t'avoir aidé.

Whismeril
0
premiumbfd Messages postés 29 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 17 juillet 2011
17 juil. 2011 à 18:52
Bonjour,

Merci de ta réponse.
Oui au niveau du get et set c'est tout ok.
Le truc, c'est qu'en pas à pas j'ai bien mon entité linq qui a le bon id. Et normalement, il suffit de lui dire :
monentite.nom = 'sonnouveaunom'
et d'update sa database.
Ce que je fais.
Je pensais que ce serait à cause du binding et du propertychanged que ça ne fonctionnait pas, puisque je ne maîtrise pas trop le binding, j'ai toujours tout fait à la mano.. Mais apparemment non. Je vais essayer autrement, voir si ça vient de là ou non...

Ou alors, je pensais que ça viendrait du fait que je ne fais pas la mise à jour sur un événement propre aux modifs datagrid, mais sur un bouton qui fait partie de la datagrid.. quelle importance ça devrait avoir?

Si quelqu'un à une autre idée..
Merci
0
Rejoignez-nous