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 :

Changer la couleur d'une cellule en fonction du contenu


Sujet :

Windows Presentation Foundation

  1. #1
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut Changer la couleur d'une cellule en fonction du contenu
    Bonjour à tous,

    Tout est pratiquement dans le titre, je cherche "simplement" à ce que la couleur du texte (ou couleur de fond, là n'est pas vraiment la question) des cellules d'une datagrid changent en fonction de leur contenu.

    Par exemple : Imaginons que les cellules de la datagrid ne puissent contenir que R, V, B. Si la cellule contient R alors elle sera rouge, V alors ce sera vert et B ce sera Bleu...

    Je pense qu'il faut utiliser les dataTemplate mais même là je ne sais pas trop comment m'y prendre. Si quelqu'un avait un exemple simple, je lui en serai extrêmement reconnaissant

    Merci d'avance
    Dans la vie, il y a trois sortes de mathématiciens : ceux qui savent compter et ceux qui ne savent pas...

    Ne jamais jouer à saute-moutons avec une licorne...

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    a mon avis avec un datatemplate et un bon converter ca devrais coller
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Je dirais plutôt un DataTemplateSelector

    http://www.switchonthecode.com/tutor...mplateselector

  4. #4
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Merci, j'ai regardé le lien qui me servira beaucoup.
    J'ai un autre problème, je tente d'abord de colorer les cellules avec la même couleur (pour ensuite rajouter le DataTemplateSelector mais je veux faire simple d'abord brique par brique) mais je n'y arrive tout simplement pas. Pourtant mon code est très simple :

    Code XAML :
    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
    <Window x:Class="WpfApplication6.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300" xmlns:my="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit">
        <Window.Resources>
            <DataTemplate x:Key="dtColorViewTemplate">
                <Border CornerRadius="5,5,5,5" BorderBrush="Black"
                   BorderThickness="1,1,1,1" VerticalAlignment="Stretch"
                   HorizontalAlignment="Stretch" Margin="1,1,1,1" Background="green"/>
            </DataTemplate>
     
        </Window.Resources>
     
        <Grid>
            <my:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}"   Margin="39,48,37,58" Name="dataGrid1" SelectionUnit="Cell">
                <my:DataGridTemplateColumn CellTemplate="{StaticResource dtColorViewTemplate}"/>
            </my:DataGrid>
        </Grid>
    </Window>
    Code C# :

    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
    DataTable testDataTable = new DataTable();
                testDataTable.Columns.Add("colonne1");
                testDataTable.Columns.Add("colonne2");
                testDataTable.Columns.Add("colonne3");
     
                DataRow drh = testDataTable.NewRow();
                testDataTable.Rows.Add(drh);
     
                DataRow drh1 = testDataTable.NewRow();
                testDataTable.Rows.Add(drh1);
     
                DataRow drh2 = testDataTable.NewRow();
                testDataTable.Rows.Add(drh2);
     
                testDataTable.Rows[0][0] = "colonne1";
                testDataTable.Rows[0][1] = "colonne2";
                testDataTable.Rows[0][2] = "colonne3";
                testDataTable.Rows[1][0] = "colonne4";
                testDataTable.Rows[1][1] = "colonne5";
                testDataTable.Rows[1][2] = "colonne6";
                testDataTable.Rows[2][0] = "colonne7";
                testDataTable.Rows[2][1] = "colonne8";
                testDataTable.Rows[2][2] = "colonne9";
                this.dataGrid1.DataContext = testDataTable;
    (Je précise que je dois binder sur une DataTable et non une ObservableCollection)

    Et en ressort une "jolie" erreur :
    La collection Items doit être vide pour pouvoir utiliser ItemsSource.
    Je ne sais absolument pas quoi penser ni faire...Peut-être est une erreur bête de ma part?

    Merci encore d'avance.
    Dans la vie, il y a trois sortes de mathématiciens : ceux qui savent compter et ceux qui ne savent pas...

    Ne jamais jouer à saute-moutons avec une licorne...

  5. #5
    Membre habitué Avatar de Thrud
    Profil pro
    Développeur .NET
    Inscrit en
    Avril 2008
    Messages
    170
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Avril 2008
    Messages : 170
    Points : 183
    Points
    183
    Par défaut
    Bonjour,

    Il faut qu'autour de tes définitions de colonnes, tu mettes une balise <my:DataGrid.Columns>.
    Sinon, la <toolkit:DataGridTemplateColumn /> est considérée comme un élément dans la DataGrid.

  6. #6
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Merci, vu que je dois gérer le binding par DataTable voilà ce que j'ai codé :

    Code XAML:
    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
    <Window x:Class="WpfApplication6.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300" xmlns:my="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit">
        <Window.Resources>
            <DataTemplate x:Key="dueDateCellTemplate" >
                <Border CornerRadius="150" BorderThickness="1" Padding="2" TextBlock.TextAlignment="Right" Background="Gray">
                    <TextBlock Text="{TemplateBinding TextBlock.Text}"/>
                </Border>
            </DataTemplate>
        </Window.Resources>
     
        <Grid>
            <my:DataGrid AutoGenerateColumns="True" ItemsSource="{Binding}"   Margin="39,48,37,58" Name="dataGrid1" SelectionUnit="Cell" AutoGeneratingColumn="dataGrid1_AutoGeneratingColumn"/>  
        </Grid>
     
    </Window>
    Code C# :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     private void dataGrid1_AutoGeneratingColumn(object sender, Microsoft.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e)
            {
     
                    DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
                    sender.GetType();
                    templateColumn.Header = "test";
     
                    templateColumn.CellTemplate = (DataTemplate)Resources["dueDateCellTemplate"];
                    e.Column = templateColumn;
     
     
            }
    ...le code C# me permettant de modifier à la main les différents templates de chaque colonne.
    Mon (nouveau) problème est que le texte ne s'affiche alors plus (mais j'ai quand même de belles ellipses grises avec le nom de chaque colonne renommé "test")
    J'ai pourtant, il me semble, bien bindé l'attribut "Text" des TextBlock présents dans la datagrid. Ou alors ce ne sont pas des TextBlock à l'intérieur?

    Encore (et encore) merci d'avance
    Dans la vie, il y a trois sortes de mathématiciens : ceux qui savent compter et ceux qui ne savent pas...

    Ne jamais jouer à saute-moutons avec une licorne...

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/05/2012, 07h50
  2. [VB.NET] listview : changer la couleur d'une cellule
    Par SergeF dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/10/2005, 08h58
  3. changer la couleur d'une cellule
    Par maxos75 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/10/2005, 20h17
  4. [JTable] Changer la couleur d'une cellule
    Par Freak49 dans le forum Composants
    Réponses: 1
    Dernier message: 06/10/2005, 18h11
  5. Réponses: 4
    Dernier message: 01/10/2005, 11h03

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