2009-12-04 31 views

Trả lời

36

Bạn có thể xử lý sự kiện LoadingRow của DataGrid để phát hiện khi một hàng được thêm vào. Trong trình xử lý sự kiện, bạn có thể nhận được một tham chiếu đến DataRow đã được thêm vào DataTable đang hoạt động như ItemsSource của bạn. Sau đó, bạn có thể cập nhật màu của DataGridRow tuy nhiên bạn thích.

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

Để đăng ký cho sự kiện này trong XAML:

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

Hoặc trong C#:

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

hãy chắc chắn để gán giá trị mặc định cho các hàng có màu không được kích hoạt bởi điều kiện –

+0

cảm ơn. đó là một cách đơn giản tuyệt vời đối với tôi. – Nasenbaer

+0

Không hoạt động. mục luôn là null – Yusha

1

QUAN TRỌNG: hãy chắc chắn luôn gán giá trị mặc định cho các hàng mà không phải là được tô màu bởi một điều kiện - hoặc bất kỳ phong cách nào khác.

Xem câu trả lời của tôi cho C# Silverlight Datagrid - Row Color Change.

PS. Tôi đang ở Silverlight và chưa khẳng định hành vi này trong WPF

10

U có thể thử này

Trong XAML

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

Trong DataGrid

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

Trong đoạn code tôi có một lớp học với

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

Khi đặt DataContext

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

Nếu u không được thiết lập màu sắc của hàng giá trị mặc định là Grey

u có thể thử mẫu này với mẫu này

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); 
Các vấn đề liên quan