IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

Changement donnée dans DataGrid


Sujet :

Silverlight

  1. #1
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut Changement donnée dans DataGrid
    Bonjour,
    J'ai un petit probleme.
    J'ai fait une application Silverlight en utilisant le pattern MVVM.
    J'affiche des données dans une DataGrid et je souhaite savoir comment faire pour les modifier.
    En faite les données sont modifiés dans le datagrid, et dans la list qui le relie a celui ci, mais elle ne le sont pas dans la base de donnée.
    Comment savoir en faite, si des données ont été modifiées?
    Et, si elles l'ont été, alors comment faire pour updater uniquement celles qui on été modifié (et non toute la liste)

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Avec RIA Services je pense qu'il y a un système de tracking des données modifiées. Mais si n'utilises pas cette techno tu seras obligé de rapatrier toutes tes données vers le serveur (avec un service WCF) et si tu utilises EF lui sauras quelles sont les données qui ont été modifiées ou non et générées une requête de màj uniquement pour les données modifiées.

  3. #3
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    Merci pour EF, je ne savais pas qu'il était si "inteligent".
    Mais en faite, dans mon precedent post, je me suis trompé, je pensais que la liste dans laquelle etaient stockée les donné coté client était modifié lorsque je changé la valeur d'une cellule, mais ce n'est pas le cas.

    Comment faire pour que les données changées dans les cellules du datagrid, le soient également dans la list du viewModel.
    Merci énormément pour ton aide

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par IsraGab Voir le message
    Comment faire pour que les données changées dans les cellules du datagrid, le soient également dans la list du viewModel.
    D'abords la liste que tu utilises est-elle de type ObservableCollection ? si non il faudra utiliser ce type pour que tout élément ajouté ou supprimé au DataGrid le soit automatiquement dans ta liste et inversement.

    Pour la modification d'un élément dans le DataGrid : est-ce que le type de ces éléments implémente l'interface INotifyPropertyChanged ? Si non il faudra l'implémenter.

  5. #5
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    La liste que j'utilise est de type PagedCollectionView. Ce type implemente INotifyPropertyChanged

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je ne parle de ce type d'objet.
    Normalement à un moment dans ton code t'as dû mettre un truc du genre :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PagedCollectionView itemListView = new PagedCollectionView(itemList); // où itemList est une ObservableCollection

    Je parle de la liste que tu passes à ta PageCollectionView.

  7. #7
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    J'utilise le Type PagedCollectionView car il est plus facile, je pense de faire des tris et des groupes avec celui ci.
    C'est vraiment indispensable l'ObservableCollection?

  8. #8
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    Ah oui, exact!
    C'est une liste normale List<qqch>.
    C'est ca qu'il faut que je change?
    Ok

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par IsraGab Voir le message
    Ah oui, exact!
    C'est une liste normale List<qqch>.
    C'est ca qu'il faut que je change?
    Ok
    Ok c'est cette liste qu'il faudra changer en ObservableCollection<qqch> et ton qqch doit implémenter INOtifyPropertyChanged.

  10. #10
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    Il n'y aurrait pas un moyen demandant un peu moins de travail?
    En fait les "qqch" sont des objets générés automatiquement par l'EF a partir de ma base de donnée.
    Faire en sorte que chaqu'un implémente INotifyPropertyChanged me semble un peu fastidieux, non?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par IsraGab Voir le message
    En fait les "qqch" sont des objets générés automatiquement par l'EF a partir de ma base de donnée.
    EF fait implémenter automatiquement INotifyPropertyChanged aux classes qu'il génére. Donc t'auras pas à faire ce travail.

    Le test sur les modifications marchent ou pas ?

  12. #12
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut public event PropertyChangedEventHandler PropertyChanged;
    Non, ca ne semble pas marcher.
    Et j'ai jeté un coup d'oeil, le event: public event PropertyChangedEventHandler PropertyChanged; manque au Designer de mon Model.
    Es tu sur qu'elle est implémentée automatiquement?

  13. #13
    Invité
    Invité(e)
    Par défaut
    +1

    T'as raison j'ai dit une bêtise
    Désolé il faudra le faire manuellement. Tu implémentes cet interface non pas dans les classes générées par EF (vu que si tu mets à jours ton modèle tu perdras tes modifications) mais dans tes ViewModel. Je ne sais pas si tu utilises le pattern MVVM déjà.

  14. #14
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    Ouai....
    En faite, j'ai fais "un genre" de MVVM.
    Je n'ai pas vraiment de Model coté client. J'utilise directement celui passé via le WebService.

    Admettons, par exemple que dans ma View, je dispose d'une DataGrid dans laquelle sont affichées toutes les données de "qqch".
    Je recois des Collections de "qqch" (stockée dans une bdd) via mon WebService. Puis à l'arrivée (coté client) je les stockes dans des PagedCollectionView dans mon ViewModel.

    Dans Ma View j'ai fais un Binding vers ces listes.

    Bref en Gros je dois refaire un Model pour chaques "qqch" que je recois via mon WS?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Non t'as pas besoin de créer un model pour ta classe QQCH. Le proxy que t'as généré avec ton service web contient déjà ton modèle donc par conséquent la classe QQCH fait partie du modèle.

    Ce que tu dois faire c'est de créer QQCHViewModel qui representera la vue-model de ta class QQCH.

    Dans la liste que tu passes à ton PageCollectionView ne sera plus de type List<QQCH> mais List<QQCHViewModel>.

  16. #16
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    Merci,
    mais je suis completement paumé avec ce pattern MVVM.
    Qu'est ce que je dois y mettre dans cette classe?
    Juste je met quelle herite de INotifyPropertyChanged?
    J'ai autre chose a faire?

  17. #17
    Invité
    Invité(e)
    Par défaut
    T'utilises quel toolkit pour mettre en place le pattern MVVM (MVVM Light Toolkit? Jounce etc) ou tu pars de 0 ?

    En attendant je te chipote une ViewModel exemple.

  18. #18
    Invité
    Invité(e)
    Par défaut
    En supposant que ton qqch c'est la classe Person t'auras ça ;
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    public class Person
    {
    	public string Nom { get; set; }
    	public string Prenom { get; set; }
    }
     
    public class PersonViewModel : INotifyPropertyChanged
    {
    	private const string NomPropertyName = "Nom";
    	private const string PrenomPropertyName = "Prenom";
    	private Person person;
     
    	public string Nom
    	{
    		get { return this.person.Nom; }
    		set
    		{
    			if (this.person.Nom == value) return;
    			this.person.Nom = value;
    			RaisePropertyChanged(NomPropertyName);
    		}
    	}
     
    	public string Prenom
    	{
    		get { return this.person.Prenom; }
    		set
    		{
    			if (this.person.Prenom == value) return;
    			this.person.Prenom = value;
    			RaisePropertyChanged(PrenomPropertyName);
    		}
    	}
     
    	public PersonViewModel(Person person)
    	{
    		if (this.person == null) throw new ArgumentNullException("person");
    		this.person = person;
    	}
    	#region INotifyPropertyChanged Membres
     
    	public event PropertyChangedEventHandler PropertyChanged;
     
    	private void RaisePropertyChanged(string propertyName)
    	{
    		if (this.PropertyChanged != null)
    			this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    	}
    	#endregion
    }

  19. #19
    Membre éclairé
    Homme Profil pro
    Programmeur PHP
    Inscrit en
    Août 2009
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Israël

    Informations professionnelles :
    Activité : Programmeur PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2009
    Messages : 244
    Par défaut
    Bon, ca marche presque.
    J'ai vu que l'ObservableCollection avait un EventHandler qui s'appel CollectionChanged. sais tu comment je fais pour lui donner une valeur (est ce que j'ai besoin de m'en servir?)?

  20. #20
    Invité
    Invité(e)
    Par défaut
    Pourquoi ne veux-tu pas passer par la méthode que je t'ai montrée.

    Je ne vois pas en quoi l'event CollectionChanged pourrait t'aider parce que ce dernier te permet de récupérer seulement les éléments qui ont été ajoutés ou qui viennent d'être supprimés dans ta collection. Donc ça ne te permet pas d'être notifié si une propriété d'un de tes éléments vient à être modifiée.

Discussions similaires

  1. Probleme affichage données dans datagrid
    Par maxwel56 dans le forum Silverlight
    Réponses: 2
    Dernier message: 17/02/2010, 21h00
  2. Formatage des données dans un datagrid
    Par calimer22 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/03/2007, 10h56
  3. inserer les données dans une base de donnée a partir d'un datagrid
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 31/07/2006, 00h46
  4. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo