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 :

Datagrid avec génération de colonne


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut Datagrid avec génération de colonne
    Bonjour,

    Pour le contexte : j'ai datagrid dont les colonnes sont créées dans le code behind (je ne les connais pas à l'avance). De plus je dois pouvoir changer les couleurs des cellules...

    Mon problème :

    Il est possible de définir un « datatemplate » pour les cellules d’un «datagrid».On a alors en datacontext l’objet « row » d’un « datagird ».

    Si je définis mes colonnes (GridTemplateColumn) dans le xaml, j’arrive sans souci à définir ce « datatemplate » et afficher les informations en utilisant un dictionnaire de dont la valeur est un objet metier « Cellule » plus un converter qui va chercher la bonne cellule à afficher en fonction de la colonne.

    Le problème apparait quand je définis mes colonnes dans le code behind : je suis obligé de créer un datatemplate dans une feuille de style ou de passer par XamlReader. Mais le converter ne fonctionne pas (le problème doit venir du fait que ce code est généré après le xaml de l’application).


    J’ai donc utiliser un autre type de colonne : « GridTextColumn » car il posisble de définir un binding et un converter dans le code behind mais je rencontre d’autres problèmes :
    Cette solution ne permet pas de définir un datatemplate et de personnaliser l'affichage.
    Je n’arrive pas à récupérer les modifications apporter au « datagrid » (aucun événement, rien dans le converter back, même visuellement le texte reprend sa valeur par défaut après une modification).

    De l'aide serait la bienvenue,

    Merci

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Bonjour,

    Tu peux nous fournir un peu de code, notamment sur la mise en place du converter coté XAML.

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut
    Voici mon converter :

    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
     
    public class CelluleConverter : IValueConverter
    {
        public object Convert(object value, Type targetType,
              object parameter, CultureInfo culture)
        {
            Dictionary<string, ICelluleViewModel> row = value as Dictionary<string, ICelluleViewModel>;
            string key = parameter as string;
            if(row.Keys.Contains(key))
            {
                return row[key].TextDefaut;
            }
            else
            {
                return null;
            }
        }
     
        public object ConvertBack(object value, Type targetType,
                object parameter, CultureInfo culture)
        {
            return null;
        }
    }
    le code xaml (MonDatagrid_LoadingRow me permet de faire un peu de formatage : couleur...):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <data:DataGrid Margin="0,5,0,5" MaxHeight="350" MaxWidth="1270" x:Name="MonDatagrid" 
                                   AutoGenerateColumns="False" 
                                   ItemsSource="{Binding RowCollection, Mode=TwoWay}" 
                                   LoadingRow="MonDatagrid_LoadingRow">
    </data:DataGrid>
    le code behind pour générer mes colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    for (int i = 1; i < columns.Count; i++)
                {
                    DataGridTextColumn dgtc = new DataGridTextColumn() { };
                    dgtc.Header = columns[i];
                    dgtc.CanUserSort = false;
                    dgtc.SortMemberPath = columns[i];
                    CelluleConverter converter = new CelluleConverter ();
                    dgtc.CanUserReorder = true;
                    dgtc.Binding = new Binding() { Converter = converter, ConverterParameter = columns[i] };
                    MonDatagrid.Columns.Add(dgtc);
                }

  4. #4
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    tu rentres dans CelluleConverter ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 5
    Par défaut
    Quand j'utilise un DataGirdTextColumn oui, mais si je fais appel a ce converter via un datatemplate definis dans un style xaml, non:

    voici le datatemplate définit dans une feuille de style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <DataTemplate x:Key="CelluleMatrice">
    <TextBox BorderThickness="0.3" Margin="0"                                             Text="{Binding Converter={StaticResource CelluleConverter}}"  />
    </DataTemplate>
    voici la génération d'un colonne DataGridTemplateColumns :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (int i = 1; i < columns.Count; i++)
                {
                    DataGridTemplateColumn dgtc = new DataGridTemplateColumn() { };
                    dgtc.Header = columns[i];
                    dgtc.CanUserSort = false;
                    dgtc.SortMemberPath = columns[i];
                    dgtc.CanUserReorder = true;
                    dgtc.CellTemplate = (DataTemplate)Application.Current.Resources["CelluleMatrice"];
                    MonDatagrid.Columns.Add(dgtc);
                }

  6. #6
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    si dans ton DataTemplate tu rajoutes cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <TextBlock Text="{Binding Source={StaticResource CelluleConverter}}"/>
    cela t'affiche bien le type du converter ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/04/2011, 11h57
  2. Datagrid avec une colonne toujours visible
    Par dark vador dans le forum ASP.NET
    Réponses: 11
    Dernier message: 15/10/2007, 11h47
  3. datagrid avec colonnes de clés externes
    Par gunnar dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/09/2007, 15h07
  4. Datagrid avec plusieurs colonnes EditCommandColumn
    Par elleN dans le forum ASP.NET
    Réponses: 4
    Dernier message: 20/07/2007, 18h00
  5. [C#] Colonne de trop dans DataGrid avec SQLCE
    Par Roach- dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/04/2005, 20h01

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