2009-12-04 9 views

Répondre

36

Vous pouvez gérer l'événement LoadingRow du DataGrid pour détecter le moment où une ligne est ajoutée. Dans le gestionnaire d'événements, vous pouvez obtenir une référence au DataRow ajouté au DataTable qui agit en tant que votre ItemsSource. Ensuite, vous pouvez mettre à jour la couleur de DataGridRow comme vous le souhaitez.

void dataGrid_LoadingRow(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e) 
{ 
    // Get the DataRow corresponding to the DataGridRow that is loading. 
    DataRowView item = e.Row.Item as DataRowView; 
    if (item != null) 
    { 
     DataRow row = item.Row; 

      // Access cell values values if needed... 
      // var colValue = row["ColumnName1]"; 
      // var colValue2 = row["ColumName2]"; 

     // Set the background color of the DataGrid row based on whatever data you like from 
     // the row. 
     e.Row.Background = new SolidColorBrush(Colors.BlanchedAlmond); 
    }   
} 

Pour vous inscrire à l'événement en XAML:

<toolkit:DataGrid x:Name="dataGrid" 
    ... 
    LoadingRow="dataGrid_LoadingRow"> 

ou en C#:

this.dataGrid.LoadingRow += new EventHandler<Microsoft.Windows.Controls.DataGridRowEventArgs>(dataGrid_LoadingRow); 
+0

assurez-vous d'attribuer les valeurs par défaut pour les lignes dont la couleur n'est pas déclenchée par une condition –

+0

merci. C'était une manière simple et étonnante pour moi. – Nasenbaer

+0

Ne fonctionne pas. l'article est toujours nul – Yusha

1

IMPORTANT: assurez-vous de toujours attribuer les valeurs par défaut pour les lignes qui ne sont pas être coloré par une condition - ou tout autre style.

Voir ma réponse à C# Silverlight Datagrid - Row Color Change.

PS. Je suis en Silverlight et n'ont pas confirmé ce comportement dans WPF

10

U pouvez essayer cette

Dans le XAML

<Window.Resources> 
<Style TargetType="{x:Type DataGridRow}"> 
    <Style.Setters> 
     <Setter Property="Background" Value="{Binding Path=StatusColor}"></Setter> 
    </Style.Setters>    
</Style> 
</Window.Resources> 

Dans le DataGrid

<DataGrid AutoGenerateColumns="False" CanUserAddRows="False" Name="dtgTestColor" ItemsSource="{Binding}" > 
<DataGrid.Columns>        
    <DataGridTextColumn Header="Valor" Binding="{Binding Path=Valor}"/> 
</DataGrid.Columns> 
</DataGrid> 

Dans le code que j'ai une classe avec

public class ColorRenglon 
{ 
    public string Valor { get; set; } 
    public string StatusColor { get; set; } 
} 

Réglé DataContext

dtgTestColor.DataContext = ColorRenglon; 
dtgTestColor.Items.Refresh(); 

Si u défini pas la couleur de la ligne la valeur par défaut est gris

u peut essayer cet exemple avec cet exemple

List<ColorRenglon> test = new List<ColorRenglon>(); 
ColorRenglon cambiandoColor = new ColorRenglon(); 
cambiandoColor.Valor = "Aqui va un color"; 
cambiandoColor.StatusColor = "Red"; 
test.Add(cambiandoColor); 
cambiandoColor = new ColorRenglon(); 
cambiandoColor.Valor = "Aqui va otro color"; 
cambiandoColor.StatusColor = "PaleGreen"; 
test.Add(cambiandoColor); 
Questions connexes