L'événement LoadingRow
de DataGrid
se déclenche chaque fois qu'un est 'instancié'. Lorsque vous faites défiler les lignes, vous pouvez entrer et sortir de la portée, et cet événement est déclenché à plusieurs reprises pour chaque ligne qui «se charge» dans la vue. En supposant que votre DataGrid
est chargé à un événement tel qu'un clic de bouton ou une telle action, vous devez probablement colorier les lignes lorsque vous chargez réellement les données dans votre DataGrid
, de préférence en utilisant une fonction écrite pour cela, et plus tard, appelez à nouveau la fonction si le contenu est modifié et que vous souhaitez afficher les couleurs en fonction du contenu modifié.
Quelque chose comme ceci:
// This could be a button event, or some other event after which you load data into the DataGrid
void ButtonLoadEvent()
{
foreach(Datagrid Row)
{
FunctionThatChangesRowColor(Row);
}
}
EDIT:
code réel sur la façon d'obtenir des lignes DataGrid et appliquer la coloration. C'est une version modifiée de votre logique de coloration, et ici chaque ligne est colorée selon que son index de ligne est impair ou pair. Vous pouvez le remplacer par votre code. Passez le DataGrid
complet à cette fonction.
private void ColorRow(DataGrid dg)
{
for (int i = 0; i < dg.Items.Count; i++)
{
DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(i);
if (row != null)
{
int index = row.GetIndex();
if (index % 2 == 0)
{
SolidColorBrush brush = new SolidColorBrush(Color.FromArgb(100, 255, 104, 0));
row.Background = brush;
}
else
{
SolidColorBrush brush = new SolidColorBrush(Color.FromArgb(100, 255, 232, 0));
row.Background = brush;
}
}
}
}
Mais cela aussi est pas une solution parfaite car vous utilisez WPF, pas WinForms. Une suggestion que j'ai est d'aller pour une approche de liaison de données WPF, et laissez le XAML faire le code de couleur pour vous.
This est un exemple de code que j'utilise souvent à cette fin.
WPF Code approche:
<Window x:Class="ColorLibrary.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ColorLibrary"
mc:Ignorable="d"
Loaded="Window_Loaded"
Title="MainWindow" Height="500" Width="400">
<Window.Resources>
<Style TargetType="{x:Type DataGridRow}">
<Style.Setters>
<Setter Property="Background" Value="{Binding Path=Code}"></Setter>
</Style.Setters>
</Style>
</Window.Resources>
<Grid>
<!-- Stuff -->
<DataGrid Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2"
Name="dgvColors"
AutoGenerateColumns="False"
Margin="4">
<DataGrid.Columns>
<DataGridTemplateColumn Header="#" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Num}" VerticalAlignment="Center" Padding="3"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="HTML Code" Width="Auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Code}" VerticalAlignment="Center" Padding="3"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Color" Width="*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Color}" VerticalAlignment="Center" Padding="3"></TextBlock>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
Dans,
<Setter Property="Background" Value="{Binding Path=Code}"></Setter>
Code
est une propriété dans une classe qui contient le nom de la couleur à utiliser pour colorer la cellule.
Ensuite, nous avons un ObservableCollection
de ces objets de classe. Vous devez définir cette propriété (de chaque élément dans le ObservableCollection
) à la couleur dont vous avez besoin pour chaque ligne à afficher.
Je dois faire cela par programme comment lire chaque ligne dans la grille de données et changer sa couleur? en utilisant un moment et en fonction de ma condition changer la couleur –
L'approche WPF _is_ le fait par programme. Vous laissez simplement XAML faire la coloration au lieu de le faire dans le code derrière. Mais si vous devez utiliser du code, consultez la mise à jour que j'ai publiée. Utilisez une boucle 'foreach' sur les lignes' DataGrid' et passez les lignes à la fonction qui les colore. – Sach
Une erreur se produit lors de l'utilisation de foreach (DataGridRow Row dans gvData) {myfunction()} –