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

Windows Presentation Foundation Discussion :

[Gridview] Colonnes et binding dynamique


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut [Gridview] Colonnes et binding dynamique
    Bonjour,

    J'ai un problème de binding délicat a vous soumettre

    les objets :

    Une objet de type Row contenant pas mal d'attributs qui vont remplir des colonnes statiques.
    Des objets de type Product qui représente un produit.
    Des objets de type RowProduct qui représente un lien entre un produit et une Row avec des attributs.

    En gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Row{
        Attributs
        List<RowProduct>;
    }
    
    class RowProduct{
        Attributs
        Product;
    }
    
    class Product{
        string Name;
        string Id;
    }
    J'ai donc une gridview qui a pour itemsource une list de Row.

    La gridview a des colonnes statiques correspondant aux attributs de la class Row.
    Ensuite j'ajoute des colonnes dynamiques définies dans une classe héritant de GridViewColumn, cette class a un constructeur qui prend (et stock dans un attribut) un argument de type Product.

    Le but de cette colonnes et d'avoir dans le header le nom du produit (facile) et dans ses cellules les attributs de l'objet de type RowProduct de l'objet Row "en cour" qui a pour objet Product l'objet Product que j'ai passé a mon constructeur(aie ).

    Voila j'espère avoir été clair (j'ai fait de mon mieux ) et j'espère que le niveau du problème en intéressera plus d'un

    Si quelqu'un a une idée de comment faire cela en Xaml je suis preneur (et a la rigueur en C#aussi )

    Ce qui m'échappe en fait c'est comment aller "sélectionner" le bon objet dans la liste.

    Merci aux courageux qui m'aideront

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par anthyme Voir le message
    Voila j'espère avoir été clair
    Pas vraiment non

    Pourrais-ti simplement nous expliquer quel est ton besoin ? Car des fois, on veut faire compliquer pour pas grand chose

  3. #3
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    et bien afficher les information de ma classe Row dans une GridView.

    Des données statiques dans les objets Row (1 colonne statique définie à l'avance par attribut), et des données sur des informations stockées dans RowProduct classées par colonne en fonction du product (je rajoute une colonne pour chaque product).

    Je ne peux pas savoir à l'avance à combien de products va être associé les row (via les RowProduct) donc je doit ajouter des colonnes de manière dynamique.

    un exemple :

    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
    Product produit1 = {
    id = 1,
    Name = "produit 1"
    }
     
    Product produit1 = {
    id = 2,
    Name = "produit 2"
    }
     
    RowProduct rowp1 = {
    Quantity = 150,
    Product = produit1 
    }
     
    RowProduct rowp2 = {
    Quantity = 120,
    Product = produit2 
    }
     
    Row ligne1 = {
    Donnée statique : "Bleu",
    (RowProduct[]) rowProducts = new []{produit1, produit2 }
    }
    Cette Row va me générer cette gridview (en la plaçant dans l'item source):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    |Donnés statique|produit1|produit2|
    *****bleu****|**150**|**120*|
    Mais dans un autre cas je peux avoir d autre produit donc il faudra que j'ajoute d'autre colonnes pour ces produit.
    La difficulté que je rencontre c pour le binding dans les cellules de produit pour récupérer le bon élément de la list rowProducts pour afficher la bonne quantité.

    J'ai quasiment réussi avec un converteur sur le binding du datacontext de cette cellule mais je n'arrive pas a lui passer l'objet product.

    EDIT : A vais dire je me doute que mettre l'objet dans les ressources c'est pas vraiment la solution la plus propre mais je n'arrive pas a atteindre cette objet dans mon DataTemplate autrement ...

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    Sinon j'ai également essayé d'injecter le product dans le converter mais j'ai le droit a une erreur me disant qu'on ne peut utiliser des dynamique ressources que sur des dependencyproperty et je pense pas qu'on puisse en faire dans un converter...

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par anthyme Voir le message
    je pense pas qu'on puisse en faire dans un converter...
    Bah si, ca reste une classe après tout

  6. #6
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Par défaut
    J'ai assez peu d'expérience la dedans.

    Ce que je sais c'est qu'il faut faire 3 chose :

    - Initialiser des paramètres dans le "constructeur" statique
    - créer un attribut static de type DependencyProperty
    - faire une propriété qui fait des SetValue et GetValue dans le get/set

    et c'est bien ce 3 eme point qui me pose problème : en effet ces méthodes sont hérité de DependencyObject mais un converter n'est pas de ce type la donc je n'ai pas accès a ces méthodes...

Discussions similaires

  1. GridView+TextBox Editable+Bind=problème d'affichage
    Par Bindy dans le forum Windows Presentation Foundation
    Réponses: 12
    Dernier message: 12/03/2009, 12h16
  2. [VB][2.0] gridview en tableau croisé dynamique?
    Par ag007 dans le forum Framework .NET
    Réponses: 1
    Dernier message: 01/07/2008, 10h19
  3. colonne à plusieurs valeur dynamique
    Par ahmedmido dans le forum SharePoint
    Réponses: 2
    Dernier message: 16/05/2008, 15h44
  4. Réponses: 3
    Dernier message: 11/04/2008, 15h37
  5. [JTable] Changer les colonnes de manière dynamique
    Par gg2laba dans le forum Composants
    Réponses: 3
    Dernier message: 03/10/2005, 23h39

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