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 :

[XAML] CollapseRowGroup en XAML sur un datagrid avec colonne dynamique


Sujet :

Silverlight

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut [XAML] CollapseRowGroup en XAML sur un datagrid avec colonne dynamique
    Bonjour à tous.

    Alors je rencontre un souci et je ne sais pas vraiment comment le résoudre.

    Petite explication :

    Dans un premier temps j'ai eu besoin de faire des datagrid avec gestion des colonnes en dynamiques, du coup je suis parti sur une solution qu'on trouve sur le net qui consiste à fournir en datasource de notre datagrid un
    IEnumerable<IDictionary>
    .

    Solution peu propre car elle nous impose des limites :
    - des problèmes sur les entêtes de colonnes (obligation d'utiliser une lettre en premier caractère et impossibilité d'utiliser des caractères spéciaux)
    - pas vraiment compatible avec le pattern MVVM que j'utilise.

    Dans un second temps, un prestataire nous a proposé sa version pour résoudre le souci compatible MVVM.

    Je vais pas vous décrire sa solution mais elle fonctionne très bien et nous permet aisément de créer des datagrid avec génération des colonnes automatiques.

    Le souci que je rencontre aujourd'hui est d'adapter le système qui me permettait de faire un Collapse sur une colonne de mon ancien datagrid.

    Le code que j'utilise se passe en behind sur le datagrid :

    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
            public void GroupByRow(List<object> GroupKey)
            {
                if (GroupKey.Count > 0)
                {
                    PagedCollectionView pcv = this.DataGrid.ItemsSource as PagedCollectionView;
                    try
                    {
                        foreach (CollectionViewGroup group in pcv.Groups)
                        {
                            if (GroupKey.Contains(group.Name))
                                DataGrid.CollapseRowGroup(group, true);
                        }
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
            }

    le code étant appelé quand les données sont chargés dans la grille.

    Aujourd'hui lorsque je veux réutiliser cette solution je me retrouve dans une impasse, l'ItemSource de mon Datagrid n'étant plus un PagedCollectionView mais un autre objet.

    Je cherche donc une solution (si elle existe) pour déclarer en XAML la colonne sur laquelle je veux grouper.

    Je ne sais pas si c'est vraiment possible, donc je m'en remets à vos connaissances.

    Cordialement
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

  2. #2
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    La solution est simple. Ton itemsource n'est pas un pagecollectionview? et alors tu en créé un à partir de ton item source.

    Tu as plein d'options pour le faire, l'une d'elle serait de créer un converter qui va transformer ta collection d'objet en PagedCollectionView
    Merci d'utiliser en cas de résolution de votre problème

    N'oubliez pas non plus le petit pouce vert pour récompenser celui que vous a aidé

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2003
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juillet 2003
    Messages : 197
    Points : 115
    Points
    115
    Par défaut
    Merci de ta réponse.

    En fouinant dans mon ancien code, j'ai retrouvé la solution.

    C'est pas encore tout à fait fonctionnel mais voici ce que je fais :

    Je m'attache à l'événement Loaded du Datagrid.

    Ensuite j'appel une fonction qui fait :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     PagedCollectionView view = new PagedCollectionView(this.dg.ItemsSource);
                view.GroupDescriptions.Add(new PropertyGroupDescription("Groupe"));
                this.dg.ItemsSource = view;
     
                PagedCollectionView pcv = this.dg.ItemsSource as PagedCollectionView;
     
                foreach (CollectionViewGroup group in pcv.Groups)
                    dg.CollapseRowGroup(group, true);

    Sachant que dans le XAML j'ai déclaré une colonne comme ça :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <cd:DataGridTextColumn x:Name="Groupe" Header="Groupe" Binding="{Binding Key.Groupe}" Visibility="Collapsed"/>

    Bon j'ai pas encore gratter assez mais je devrais réussir à trouver pourquoi ma colonne Groupe n'est pas utilisée pour le Collapse
    -- Se lance dans l'asp.net 2.0 --

    Made In Taïwan

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/10/2014, 12h02
  2. [MVVM] Problème de rollback sur un datagrid avec CellEditEnding
    Par Oberown dans le forum Windows Presentation Foundation
    Réponses: 8
    Dernier message: 28/08/2012, 16h43
  3. gridview en édit mode avec colonnes dynamiques
    Par badi3a82 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 24/06/2010, 12h34
  4. Réponses: 4
    Dernier message: 17/07/2008, 12h24
  5. datagrid avec colonnes de clés externes
    Par gunnar dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/09/2007, 15h07

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