5 votes

Définissez DataGridTextColumn.ElementStyle par du code de fond

J'ai une grille de données dans mon interface utilisateur. Un datatable y sera lié. En raison du fait que le datatable peut avoir un format différent, j'ajoute des colonnes et lie les valeurs à la grille dans le code-behind. Voici le code :

for (int iLoop = 0; iLoop < dtGroup.Columns.Count; iLoop++)
{
    DataGridTextColumn dgColumn = new DataGridTextColumn();
    dgColumn.Header = dtGroup.Columns[iLoop].ColumnName;
    dgColumn.Binding = new Binding(dtGroup.Columns[iLoop].ColumnName);

    this.dgGroupMatrix.Columns.Add(dgColumn);
}

Ce que je veux, c'est que la couleur de fond de la cellule de la grille soit basée sur la valeur.

Je peux le faire en XAML.

                <Style.Triggers>
                    <Trigger Property="Text" Value="V31">
                        <Setter Property="Background" Value="LightGreen"/>
                    </Trigger>
                </Style.Triggers>

Mais je ne peux pas configurer les colonnes de la grille en XAML, car la grille aura un format différent.

Que puis-je faire?

7voto

Erno de Weerd Points 30391

Faites simplement la même chose en code :

for (int iLoop = 0; iLoop < dtGroup.Columns.Count; iLoop++)
{
    DataGridTextColumn dgColumn = new DataGridTextColumn();
    dgColumn.Header = dtGroup.Columns[iLoop].ColumnName;
    dgColumn.Binding = new Binding(dtGroup.Columns[iLoop].ColumnName);

    Style columnStyle = new Style(typeof(TextBlock));
    Trigger backgroundColorTrigger = new Trigger();
    backgroundColorTrigger.Property = TextBlock.TextProperty;
    backgroundColorTrigger.Value = "V31";
    backgroundColorTrigger.Setters.Add(
        new Setter(
            TextBlock.BackgroundProperty,
            new SolidColorBrush(Colors.LightGreen)));
    columnStyle.Triggers.Add(backgroundColorTrigger);
    dgColumn.ElementStyle = columnStyle;

    this.dgGroupMatrix.Columns.Add(dgColumn);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X