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

C# Discussion :

Gestion DataGrid en wpf


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut Gestion DataGrid en wpf
    Bonjour,

    J'avais l'habitude en winform d'utiliser le controle "DataGridView" et de le gérer "sans" binding :

    Je définissais à la main les éléments comme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataGridViewColumn col2 = new DataGridViewTextBoxColumn();
                col2.Name = "Catégorie";
                dgListeProcedures.Columns.Add(col2);
                dgListeProcedures.Columns[1].Width = 120;
    J'alimentais les items à partir de liste d'objet métier, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            string[] row = new string[] {procedure.idProcedure.ToString(), 
                            procedure.nomCategorie,
                            procedure.libelleProcedure,
                            procedure.nomRedacteur,
                            procedure.dateCreationProcedure.ToString(),
                            procedure.dateModificationProcedure.ToString(),
                            procedure.fichierProcedure};
                        dgListeProcedures.Rows.Add(row);
    Les modérateurs du site m'expliquaient l’intérêt pour un débutant comme moi de maitriser les objets et méthodes sans passer par les fonctions de binding !

    Je suis en train de me former au wfp et bien sur je "tombe" sur un besoin d'alimenter et de gérer les actualisations d'une DataGrid (pas de DGView en mfp je crois)

    Donc, messiers sur quelle piste dois je me tourner ? en wfp tout le monde parle du binding qui semble être le paradigme absolu en la matiure ! vos avis svp

    Merci

  2. #2
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Bonjour ,

    Trés bon initiative de ta part de t'intéresser aux bindings ( à terme il n'y a plus le choix ) . De mon coté , a mon arrivé au sein de ma nouvelle boite , j'ai du apprendre le WPF.
    J'ai suivi ce tutoriel que je trouve très complet pour un départ , il te permettera de voir comment utiliser les controles , les bindings , les ressources dictionnary etc ..

    je te le conseil : http://www.wpf-tutorial.com/
    throw new NoSignatureException();

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Merci pour l'info je regarde ça

    Cordialement

  4. #4
    Membre à l'essai
    Femme Profil pro
    Apprentie
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprentie

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    je suis à peu près dans le même cas que toi, je suis passée de WF C# à WPF C# & XAML, et donc du DataGridView au DataGrid.
    Non, il n'y a pas de DataGridView en WPF (malheureusement ) et d'après les recherches que j'avais faites sur le DataGrid et mes expériences, (d'ailleurs pour une fois, wpf-tutorial n'explique pas grand chose au sujet des DataGrid... ), la seule solution qui marche est de binder (= lier) les valeurs par colonnes.

    Ça parait compliqué au premier abord de "binder" toutes les colonnes, mais avec un code simple et explicatif, ça passe assez bien.
    Si tu recherches comment faire, je peux t'en fournir un avec des explications.

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Merci pour vos indications ! effectivement je viens de "binder" globalement mon dataGrid et cela fonctionne bien. Par contre dans mon application je prévois un bouton "Actualiser" qui doit permettre de renouveler
    l'accès à la base de données (couche DAL) pour actualiser ensuite le dataGrid. La mise à jour (le binding) fonctionne à merveille sauf que d'un point de vue affichage le dataGrid ajoute les enregistrements à la suite de ceux affichés lors de l'ouverture de l'application ! comment puis je "supprimer" le contenu du dataGrid avant de "binder" ? les méthodes utilisées en Winform ne s'appliquent pas !

    Cordialement

  6. #6
    Membre à l'essai
    Femme Profil pro
    Apprentie
    Inscrit en
    Avril 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Apprentie

    Informations forums :
    Inscription : Avril 2016
    Messages : 18
    Points : 16
    Points
    16
    Par défaut
    Si je comprends bien, tu as tes anciennes valeurs, puis tes nouvelles valeurs s'ajoutent dans des nouvelles lignes?

    Si c'est le cas, comment fais-tu ton binding? Avec une ObservableCollection? List? (ou peux-tu mettre un bout du code? )

  7. #7
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Ci dessous le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     ObservableCollection<BEL_affichageD> listeD = new ObservableCollection<BEL_affichageDeces();
     
    dg_D.DataContext = listeD;
    Et dans le fichier Xaml

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <DataGrid x:Name="dg_D" AutoGenerateColumns="False" Height="81" Margin="76,0,189,137" VerticalAlignment="Bottom" ItemsSource="{Binding}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Ett" Binding="{Binding et}" />
                    <DataGridTextColumn Header="Ns" Binding="{Binding ns}" />
                    <DataGridTextColumn Header="Ns7" Binding="{Binding ns7}" />
                </DataGrid.Columns>
            </DataGrid>
    Dans ma classe métier (un extrait) :
    Code : 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
     
            private string _et;
     
     
            public string et
            {
                get { return this._et; }
                set
                {
                    if (this._et != value)
                    {
                        this._et = value;
                        this.NotifyPropertyChanged("et");
                    }
                }
            }

  8. #8
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 899
    Points : 1 916
    Points
    1 916
    Par défaut
    WPF est conçu pour s'harmoniser avec le design patter MVVM (Model-View-ViewModel).

    Avant de te lancer pleinement dans WPF il vaut mieux être famillier avec des notions comme l'interface INotifyPropertyChange, les Dependency Objects et leur Dependency Properties et tu peux t'intéresser à la bibliothèque MVVMLight de Laurent Bugnion qui fournit une implémentation de base pour MVVM, notamment avec ses classes ViewModelBase et RelayCommand. L'essentiel de l'interface graphique d'une application WPF est défini par les fichiers Xaml en n'utilisant pas de code behind. Les éléments de données sont liés aux éléments graphiques via leurs propriétés et les actions utilisateurs sont appelées par des objets Command.

    Pour afficher des listes de d'objet tu peux utiliser un simple ItemsControl ; pour afficher des objets sous forme de grille tu peux utiliser un ListView en paramétrant un objet GridView pour sa propriété View ; les DataGrid sont utiles si tu veux faire de l'affichage et de la modification à même la grille. Tous ces objets ont une propriété ItemsSource pour s'attacher à une liste d'éléments. Tu dois utiliser une ObservableCollection et une CollectionView si tu veux une liste qui soit mise à jour en temps réel avec les ajouts et suppressions. Tu trouveras plein d'informations sur la MSDN.

    Il y a beaucoup de choses à apprendre si tu veux maîtriser WPF mais tu verras après que c'est très sympa à utiliser.

  9. #9
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Merci Noxen !

    J'ai déjà regardé de loin le paradigme MVVM. Je ne souhaite pas modifier le DataGrid donc j'en déduis à la lecture de ton post que je n'ai pas utilisé le bon contrôle, un "ListView" aurait été préférable ! en revanche, pour ne pas tout modifier peut tu me dire si il y a une solution "simple" pour que mon contrôle ne cumule pas les enregistrement à chaque Binding ?

    Merci

  10. #10
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2014
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    Il fallait résonner en termes de source du binding donc au niveau de la collection et non du contrôle !!!

    ObservableCollection<BEL_affichageD> listeD = new ObservableCollection<BEL_affichageD>();

    listeD.Clear()

    Merci à tous pour votre aide

    PS : je vais donc utiliser un listView la prochaine fois et surtout étudier le MVVM

  11. #11
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 899
    Points : 1 916
    Points
    1 916
    Par défaut
    Désolé, je n'ai pas pu me reconnecter plus tôt. Heureux de voir que tu as pu résoudre ton problème, manifestement il s'agissait du rafraîchissement de la liste. N'hésite pas revenir sur le forum pour poser des questions si tu as un doute.

    Pour ce qui est de la ListView ce n'est pas si compliqué. Supposons que tu veuilles gérer une liste d'invités :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Guest
    {
     public int Id { get; set; }
     public string LastName { get; set; }
     public string FirstName { get; set; }
    }

    Ils sont sont stockés dans une ObservableCollection<Guest> et présentés à l'interface graphique dans une propriété Guests de type CollectionView (c'est-à-dire une vue sur une liste d'éléments). Le code xaml pour afficher dans une grille Id, Nom et Prénom est le suivant :

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ListView ItemsSource="{Binding Guests}">
     <ListView.View>
      <GridView>
       <GridViewColumn DisplayMemberBinding="{Binding Id}" Header="Id" />
       <GridViewColumn DisplayMemberBinding="{Binding LastName}" Header="Nom" />
       <GridViewColumn DisplayMemberBinding="{Binding FirstName}" Header="Prénom" />
      </GridView>
     </ListView.View>
    </ListView>

    Bon courage !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/12/2010, 13h42
  2. L'equivalent du datagrid en WPF?
    Par Leelith dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 19/12/2009, 10h15
  3. DataGrid en WPF, parcours du combattant
    Par titourock dans le forum Windows Presentation Foundation
    Réponses: 18
    Dernier message: 20/08/2009, 14h40
  4. Equivalent du datagrid en WPF
    Par demando77 dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 07/08/2008, 19h14
  5. [C#-1.1] gestion datagrid cellule par cellule
    Par philo71 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/11/2006, 17h08

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