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

Linq Discussion :

MAJ de données dans BDD via interface WPF [Débutant]


Sujet :

Linq

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 59
    Points : 43
    Points
    43
    Par défaut MAJ de données dans BDD via interface WPF
    Bonjour à tous.

    Dans le cadre d'un projet scolaire, je suis en train de développer une couche d'accès aux données d'une BDD SQLServer.

    Pour les tests, j'ai une application WPF qui se contente d'afficher les données dans des DataGrid.
    Donc jusqu'à présent, je sais récupérer les données de ma base sans soucis, et l'affichage se fait sans problèmes.

    Par contre, je coince quand il s'agit de mettre a jour des données...
    En fait, j'aimerais que quand on ajoute une ligne dans la DataGrid, ou qu'une donnée est modifiée (toujours dans la DataGrid) cette donnée soit ajoutée/mise à jour dans la base de données également...

    Voici donc ce que j'ai jusque maintenant :
    La récupération des données (dans ma fenêtre WPF) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DAL dal = new DAL();
    ICollectionView cvNews;
    ObservableCollection<New> newsList;
     
    // News list loading
    newsList = dal.getNewsList();
    cvNews = CollectionViewSource.GetDefaultView(newsList);
    this.GridNews.ItemsSource = cvNews;
    Où GridNews est la DataGrid.
    Et la couche d'accès aux données (DAL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Method returns the list of News in the DB
    public ObservableCollection<New> getNewsList()
    {
        ObservableCollection<New> ne;
        DataClassesDataContext db = new DataClassesDataContext();
        var News = from n in db.News
                   select n;
        ne = new ObservableCollection<New>(News);
        return ne;
    }
    Après recherches, j'ai tenté d'utiliser les Events CollectionChanged et PropertyChanged de DataGrid pour mettre a jour la BDD dès qu'une donnée est ajoutée/modifiée, mais sans succès.
    Je me suis heurté au fait que l'event CollectionChanged est lancé dès qu'une nouvelle ligne est ajoutée, sans que je n'aie le temps de remplir les champs...

    Pour les opérations d'ajout/modification dans la BDD j'ai trouvé quelques trucs sur le net, mais sans succès...

    Quelqu'un aurait une petite idée de comment faire ?

    Merci d'avance !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    afin que la collection d'objets de type "New" puisse renvoyer une notification de changement à chaque fois que tu change quelque chose à la grille :
    - Chaque colonne de ta grille doit avoir une liaison de données (databinding) avec une des propriétés de la classe "New", mais ça je pense que tu l'as déjà fait.
    - Ta classe "New" doit implémenter l'interface "INotifyPropertyChanged". Voir ici pour les détails de cette interface.
    - Les propriétés qui font l'objet de liaisons de données (Databinding comme on dit) doivent faire appel à l'événement "PropertyChanged" de cette interface pour informer du changement. Ton objet grille va s'abonner automatiquement à l'événement "PropertyChanged".

    Ainsi, ton objet de type "ObservableCollection<New>" pourra bien déclencher les événements CollectionChanged quand l'utilisateur va changer des valeurs. Ah oui, j'oubliais: fais aussi attention dans les colonnes si la notif de changement se passe sur perte de focus ou sur changement direct...
    Dernière modification par Invité ; 19/11/2013 à 09h20.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2008
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 59
    Points : 43
    Points
    43
    Par défaut
    Bonsoir.

    Finalement, j'ai laissé tomber les Event des ObservableCollection. Pas le temps de chercher plus en profondeur...
    J'ai bêtement ajouté un bouton pour déclencher les mises à jour...

    J'ai aussi changé le processus de mise à jour et de récupération des données.
    Plus de passage par une couche d'accès aux données, les DataGrid de la fenêtre WPF sont directement liées aux tables de la BDD.
    Lors de l'appui sur le bouton de mise à jour, il suffit donc de faire un simple SubmitChanges() pour terminer la mise à jour, ainsi qu'une petite gestion des exceptions pour couronner le tout, et le tour est joué.

    Merci pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Récupération d'une donnée dans BDD Access
    Par Kerod dans le forum Windows Forms
    Réponses: 8
    Dernier message: 29/07/2014, 19h29
  2. [MySQL] insertion données dans BDD via formulaire
    Par stefanelle dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 23/02/2009, 10h51
  3. Pbs d'insertion, de maj des données dans ma base
    Par bigwal2007 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 29/08/2007, 16h10
  4. [MySQL] problème ajout donnée dans BDD via php
    Par Skeud007 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/05/2006, 23h41
  5. [MySQL] vérifier données dans BDD
    Par ardamus dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/01/2006, 17h21

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