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 :

Merge Column en C# sans passer par le XAML WPF


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : février 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Merge Column en C# sans passer par le XAML WPF
    Bonjour,

    je souhaiterais réaliser un merge de lignes dans un tableau affiché en WPF depuis le C#.

    J'ai un objet que nous allons nommer "Indicateurs" et une fonction Gene_Indicateurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class Indicateurs
    {
       public string Origine{ get; set; }
       public string Nombre{ get; set; }
       public string Type{ get; set; }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private void Gene_Indicateurs(List<Indicateurs> ListIndic)
    {
        Datagrid DatagridIndic = new Datagrid(); 
        DatagridIndic.ItemsSource = ListIndic;     // Remplissage de la Datagrid à partir de la liste Indicateur
        UsercontrolIndic.Content = DatagridIndic; //Usercontrol déclaré dans le XAML WPF
    }
    Dans une autre fonction, je remplis ma liste d'Indicateurs grâce à mes données sources, je trie ces données par "Origine" et je fais appel à la fonction Gene_Indicateurs afin d'afficher directement dans le WPF mon tableau.

    Je souhaiterais réaliser un merge des lignes par Origine et si possibilité par nombre aussi.

    Exemple :

    Résultat actuel :
    ORIGINE NOMBRE TYPE
    Ain 427 Poire
    Ain 538 Banane
    Ain 459 Citron
    Calvados 832 Pomme
    Corse-du-Sud 500 Abricot
    Corse-du-Sud 500 Framboise
    Corse-du-Sud 500 Mûre
    Loire 534 Figue
    Lot-et-Garonne 547 Prune

    Résultat désiré:
    ORIGINE NOMBRE TYPE
    Ain 427 Poire
    538 Banane
    459 Citron
    Calvados 832 Pomme
    Corse-du-Sud 500 Abricot
    Framboise
    Mûre
    Loire 534 Figue
    Lot-et-Garonne 547 Prune

    Si je résume, je remplis ma liste, je fournis ma liste à ma Datagrid, et je fournis ma Datagrid à mon Usercontrol déclaré dans le XAML. Je ne trouve pas de solution pour réaliser un merge directement dans le code C#,

    Pouvez vous m'aiguiller là dessus ?
    Merci d'avance,

    Alexandre

  2. #2
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2005
    Messages : 462
    Points : 1 039
    Points
    1 039
    Par défaut
    Salut,

    N'hésites pas à aller faire un tour sur Linq Sample

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
        public class Indicateur
        {
            public string Origine { get; set; }
            public int Nombre { get; set; }
            public string Type { get; set; }
        }
        .............
        var indicateurs = new List<Indicateur>()
        {
            new Indicateur { Origine = "Ain", Nombre = 10, Type = "Poire"},
            new Indicateur { Origine = "Ain", Nombre = 10, Type = "Pomme"},
            new Indicateur { Origine = "Ain", Nombre = 20, Type = "Banane"},
            new Indicateur { Origine = "Ain", Nombre = 30, Type = "Poire"},
            new Indicateur { Origine = "Ain", Nombre = 30, Type = "Banane"},
            new Indicateur { Origine = "Ain", Nombre = 30, Type = "Banane"},
            new Indicateur { Origine = "Ain", Nombre = 30, Type = "Pomme"},
            new Indicateur { Origine = "Ain", Nombre = 40, Type = "Banane"},
     
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Pomme"},
            new Indicateur { Origine = "Corse", Nombre = 10, Type = "Banane"},
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Poire"},
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Pomme"},
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Banane"},
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Pomme"},
        };
     
        var test = indicateurs.GroupBy(i => new { i.Origine, i.Nombre });
        var test2 =
            from i in indicateurs
            group i by new
            {
                i.Origine,
                i.Nombre
            }
            into gi
            select gi;
         .........

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

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : juin 2007
    Messages : 862
    Points : 1 846
    Points
    1 846
    Par défaut
    Qu'est-ce-que tu appelles un "merge" ? Tout ce que je vois dans ton tableau c'est que tu fais disparaître les valeurs similaires sur des lignes qui se succèdent, mais je ne vois pas de fusion des résultats.

  4. #4
    Expert confirmé
    Inscrit en
    avril 2008
    Messages
    2 545
    Détails du profil
    Informations personnelles :
    Âge : 62

    Informations forums :
    Inscription : avril 2008
    Messages : 2 545
    Points : 4 351
    Points
    4 351
    Par défaut
    bonjour

    comme dit par katkiller ,Linq est ton ami, pour se livrer à des tris et des totaux ...
    Mieux encore , tu peux ensuite rafraichir Datagrid.ItemsSource avec le résultat de la requête

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : février 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par katkiller Voir le message

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
        public class Indicateur
        {
            public string Origine { get; set; }
            public int Nombre { get; set; }
            public string Type { get; set; }
        }
        .............
        var indicateurs = new List<Indicateur>()
        {
            new Indicateur { Origine = "Ain", Nombre = 10, Type = "Poire"},
            new Indicateur { Origine = "Ain", Nombre = 10, Type = "Pomme"},
            new Indicateur { Origine = "Ain", Nombre = 20, Type = "Banane"},
            new Indicateur { Origine = "Ain", Nombre = 30, Type = "Poire"},
            new Indicateur { Origine = "Ain", Nombre = 30, Type = "Banane"},
            new Indicateur { Origine = "Ain", Nombre = 30, Type = "Banane"},
            new Indicateur { Origine = "Ain", Nombre = 30, Type = "Pomme"},
            new Indicateur { Origine = "Ain", Nombre = 40, Type = "Banane"},
     
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Pomme"},
            new Indicateur { Origine = "Corse", Nombre = 10, Type = "Banane"},
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Poire"},
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Pomme"},
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Banane"},
            new Indicateur { Origine = "Corse", Nombre = 5, Type = "Pomme"},
        };
     
        var test = indicateurs.GroupBy(i => new { i.Origine, i.Nombre });
        var test2 =
            from i in indicateurs
            group i by new
            {
                i.Origine,
                i.Nombre
            }
            into gi
            select gi;
         .........
    J'ai essayé de suivre ta solution en m'épaulant du lien que tu m'as donné, et d'y ajouter le résultat dans ma Datagrid puis dans mon UserControl de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyDatagrid.ItemSource = test2.SelectMany(i => i).ToList();
    MyUsercontrol.Content = MyDatagrid;
    Mais j'obtiens le même résultat qu'avant, pouvez vous m'aiguiller là dessus ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    février 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : février 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Relance
    Bonjour,

    je me demandais à tout hasard si quelqu'un pouvait m'aiguiller une dernière fois sur la question ci-dessus afin de clôturer cette discussion en cas de réussite pour ma part ?

    merci d'avance,
    bonne journée,

    Alexandre

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    novembre 2013
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2013
    Messages : 40
    Points : 60
    Points
    60
    Par défaut
    Tu peux peut être utiliser un converter qui va aller voir la valeur de la ligne précédente et renvoyer null si la valeur est identique.

    Il faudra donner un template aux cellules de la colonne en question (textblock) et passer la datagridrow au binding qui utilisera le converter afin de retrouver tous les éléments nécessaire (item et liste d'items).

    Je n'ai pas testé mais c'est une piste. Après il faut aussi gérer le tracé des lignes qui entourent les cellules.

Discussions similaires

  1. Imprimer un TIFF sans passer par PostScript
    Par iubito dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 22/03/2004, 21h44
  2. Réponses: 10
    Dernier message: 24/02/2004, 13h28
  3. Réponses: 4
    Dernier message: 05/02/2004, 19h18
  4. Afficher une image sans passer par les textures
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/05/2003, 20h13
  5. [Kylix] Débrider Kylix sans passer par le Net
    Par BXDSPORT dans le forum EDI
    Réponses: 1
    Dernier message: 23/03/2003, 11h52

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