2016-06-16 10 views
2

Ich habe eine DataGrid, die automatisch generiert ihre Spalten mit einem DataTable in Code. Ich muss eine Hintergrundfarbe einer Zeile ändern, wenn Spalte X den Wert FALSE oder was auch immer haben. Kann ich es mit AutoGeneratingColumn="OnAutoGeneratingColumn" eventargs tun? Wenn nicht, wie kann ich den Style einer Zeile ändern, indem Sie vielleicht DataTriggers auf den Spaltenwert zugreifen und die Hintergrundfarbe der Zeile beeinflussen?DataTriggers basierend auf Spalte Name und seinen Wert in WPF

EDIT 1: Frage: Wie kann ich die Hintergrundfarbe einer Zeile basierend auf einem Wert auf einer Spalte ändern?

EDIT 2: Basierend auf Spalten Ereignis generieren kann ich dies tun:

EDIT 3: Codierung

public static void OnAutoGeneratingColumn(object sender, System.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e) 
     { 
      try { 

       if (e.PropertyType == typeof(System.DateTime) && e.Column.Header.ToString() != "Data de Registo") 
        (e.Column as System.Windows.Controls.DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy"; 

       if (e.PropertyType == typeof(System.DateTime) && e.Column.Header.ToString() == "Data de Registo") 
        (e.Column as System.Windows.Controls.DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy HH:mm:ss"; 
       if (e.Column.Header.ToString() == "FT") 
       { 
        StringReader stringReader = new StringReader("<Style xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"" 
         + " TargetType=\"{x:Type DataGridCell}\">" 
         + " <Setter Property=\"Background\" Value=\"Red\"/>" 
         + " </Style>"); 
        XmlReader xmlReader = XmlReader.Create(stringReader); 
        Style style = (Style)System.Windows.Markup.XamlReader.Load(xmlReader); 
        e.Column.CellStyle = style; 
       } 
      } 
      catch (Exception) { } 
     } 

Also änderte ich die Hintergrundfarbe einer Spalte (seine Zellen), aber was ich will, ist Überprüfen Sie den Wert für jede Zeile und rot, wenn Wert X oder grün, wenn Wert Y.

+0

Nein ... überhaupt nicht. – int3

+0

Entschuldigung entfernt ... das war nicht geplant hier zu sein :-) – Fruchtzwerg

Antwort

3

Verwenden Sie eine Style und DataTrigger für die DataGrid. Formatieren Sie dann entsprechend dem gebundenen Datenelement.

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding Path=<!--Your property name here-->}" 
         Value="False"> 
       <Setter Property="Background" Value="<!-- Your desired Brush here-->" /> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

Wenn Sie die Standard-Indexer Eigenschaft des gebundenen Datenelement zugreifen möchten, machen Sie Ihren Weg Path=[IndexerName] oder Path=[(sys:Int32)0].

+0

Du hast mir das Leben gerettet. Vielen Dank! Jedes Mal, wenn ich "Bindungspfad" verwende, beziehe ich mich auf das Objekt, auf das sich Datagrid bezieht, richtig? – int3

+1

Wenn Sie den Stil auf "DataGridRow" (daher "DataGrid.RowStyle") festlegen, wird der 'DataContext' dieser Zeile verwendet. Der 'DataContext' dieser Zeile ist durch die 'DataGrid'-Logik tatsächlich die gebundene' Row [i]' Ihrer 'DataTable'. – Adwaenyth

Verwandte Themen