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 :

Affichage sélectif de lignes dans un datagrid


Sujet :

Silverlight

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Par défaut Affichage sélectif de lignes dans un datagrid
    Bonjour à tous,

    Sur ma page, j'ai un datagrid qui ramène des titres de livres (qui ont une date de sortie) reliés à des auteurs. Toutes mes données sont présentes à l'écran, tout va bien de ce côté là. C'est au niveau de l'affichage que je planche et que je n'arrive pas à faire ce que je veux.

    Admettons que j'ai L1, L2 et L3 écrit par A1, et L4 écrit par A2. Mon affichage est trié par date, et je voudrais que quand 2 livres consécutifs sont écrits par le même auteur, le nom de l'auteur n'apparaisse pas. Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    A1
       L1
       L2
    A2
       L4
    A1
       L3
    Pour le moment, j'ai créé un DataTemplate dans mon Datagrid pour effectuer cet affichage :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <DataTemplate>
        <StackPanel Orientation="Vertical">
            <Grid x:Name="gd_auteur">
                <TextBlock x:Name="auteur" Text="{Binding Path=nom_auteur}" />
            </Grid>
     
            <Grid x:Name="gd_livre">
                <TextBlock x:Name="livre" Text="{Binding Path=titre_livre}" />
            </Grid>
        </StackPanel>
    ...
    </DataTempalte>
    (J'ai mis des grid car je n'affiche pas que le nom ou le titre, j'ai d'autres informations, ainsi que des cases à cocher et des boutons pour agir sur les différentes parties)
    Cependant, avec ce code, je n'arrive pas à rendre invisible gd_auteur quand je le voudrais (depuis un datatemplate, impossible d'avoir accès aux sous-parties)

    Alors je me demande : un datagrid est-il une bonne idée? Y a-t-il une méthode qui me permettrait de faire ça facilement? (et difficilement??)

    Merci pour vos réponses.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2009
    Messages
    2 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2 056
    Par défaut
    Une solution par forcément élégante c'est de passer par un converter.
    Ce dernier garde en mémoire le nom du dernier auteur qu'il à déjà affiché et ne renvoie rien si l'auteur est déjà listé.


    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <DataTemplate>    <StackPanel Orientation="Vertical">
            <Grid x:Name="gd_auteur">
                <TextBlock x:Name="auteur" Text="{Binding Path=nom_auteur, Converter=ConvertAuteur}" />
            </Grid>
     
            <Grid x:Name="gd_livre">
                <TextBlock x:Name="livre" Text="{Binding Path=titre_livre}" />
            </Grid>
        </StackPanel>
    ...
    </DataTempalte>

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Par défaut
    Merci pour ta réponse Micka.

    C'est vrai que je n'avais pas pensé à cette histoire de converter pour jouer sur la visibilité (suis un petit nouveau dans le monde de silverlight, je ne pense pas encore en full silverlight )
    Je vais voir ce que je peux faire au niveau de la visibilité de la grid en utilisant un converter.

    Ce dont j'ai peur, c'est que je crois qu'il créé une grid par ligne affichée, donc que ça ne soit pas le même objet d'une ligne à l'autre, et qu'il ne soit pas capable d'avoir la valeur précédente que j'ai affiché.

    J'essaye ce soir et je vous dis tout.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Par défaut
    Ben, euh... J'ai dû rater un truc quelque part.

    Il me semblait avoir vu quelque part que je pouvais utiliser value.old pour les converter, mais pas du tout en fait. Je me demande bien avec quoi j'ai confondu...

    J'ai voulu utiliser une dependency property... Mais on ne peut apparemment pas utiliser de TemplateBinding dans un DataTemplate...

    Du coup, j'en reviens à mon point de départ et je ne sais plus quoi tenter pour le coup

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 259
    Par défaut
    C'est bien ce que je craignais : j'ai créé un templatedcontrol pour mettre à l'intérieur de mon datatemplate
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <DataTemplate>
        <test:DataGridTemplate Is_Visible="{Binding Path=id_auteur}" />
    </DataTemplate>
    j'ai ensuite créé une dependency property pour jouer sur la visibilité en fonction de l'id retourné...
    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
     
    public int Is_Visible
        {
            get { return ( int )GetValue ( Is_VisibleProperty ); }
            set { SetValue ( Is_VisibleProperty, value ); }
        }
     
    public static readonly DependencyProperty Is_VisibleProperty = DependencyProperty.Register ( "Is_Visible", typeof ( int ), typeof ( DataGridTemplate ), new PropertyMetadata ( 0, OnVisibilityChanged ) );
     
    private static void OnVisibilityChanged ( DependencyObject d, DependencyPropertyChangedEventArgs e )
        {
            DataGridTemplate cow = ( DataGridTemplate )d;
     
            if ( cow.id == cow.Is_Visible )
                cow.Visibility = Visibility.Collapsed;
        }
    mais à chaque fois qu'une nouvelle ligne se créé, il fabrique un nouvel objet. Du coup, la grid du dessous ne connaît pas la grid du dessus...


Discussions similaires

  1. [Datagrid]:Ajout de ligne dans mon datagrid
    Par shirya dans le forum ASP.NET
    Réponses: 6
    Dernier message: 29/01/2007, 17h52
  2. [VB.NET][WindowsForm]Limiter le nombre de ligne dans un datagrid
    Par jota5450 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/01/2007, 16h21
  3. [C#] Sélection de lignes dans un DataGrid
    Par wayak3 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 12/07/2005, 10h17
  4. [C#]Recuperer valeur de ligne dans un datagrid
    Par kenzo080 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 24/06/2005, 05h07
  5. [C#] Largeur de colonne et de ligne dans un DataGrid
    Par pc152 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/08/2004, 14h09

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