una net filas fila encabezado custom como columna colores color cambiar wpf colors datagrid row

wpf - net - Asignación programática de un color a una fila en DataGrid



datagridview color row (3)

Puede controlar el evento LoadingRow de DataGrid para detectar cuándo se agrega una fila. En el controlador de eventos, puede obtener una referencia a la DataRow que se agregó a la DataTable que actúa como su ItemsSource. Luego puedes actualizar el color de DataGridRow como quieras.

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); } }

Para inscribirse en el evento en XAML:

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

O en C #:

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

Necesito asignar un color a la fila que agrego en tiempo de ejecución a la tabla de datos. ¿Cómo se puede hacer esto?


Puedes probar esto

En el xaml

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

En el datagrid

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

En el código tengo una clase con

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

Cuando se establece el DataContext

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

Si u no establece el color de la fila, el valor predeterminado es Gris

Puedes probar esta muestra con esta muestra

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);


IMPORTANTE : asegúrese de asignar siempre los valores predeterminados para las filas que no están coloreadas por una condición, o cualquier otro estilo.

Ver mi respuesta a C # Silverlight Datagrid - Cambio de color de fila .

PD. Estoy en Silverlight y no he confirmado este comportamiento en WPF