Problème databinding twoways

Signaler
Messages postés
29
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
17 juillet 2011
-
Messages postés
29
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
17 juillet 2011
-
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

Messages postés
15399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 janvier 2021
501
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
Messages postés
29
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
17 juillet 2011

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