Benutzer mit den meisten Antworten
Hintergrundfarbe von den Reihen in einem DataGrid festlegen???

Frage
-
Hallo,
ich habe einen DataGrid, dessen ItemsSource über einer Liste befühle:
<sdk:DataGrid HorizontalAlignment="Left" x:Name="dataGrid" VerticalAlignment="Top" Width="880" Height="621" Margin="10,10,0,0" GridLinesVisibility="Vertical" HeadersVisibility="All" IsReadOnly="True" CanUserSortColumns = "False" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" BorderBrush="Gray" BorderThickness="2" />
IList<Mitarbeiter> dataGridAusgabe = new List<Mitarbeiter>(); dataGridAusgabe.Add(new Mitarbeiter() { titel = "Herr", vorname = "Michael", nachname = "Hoffmann" }); dataGridAusgabe.Add(new Mitarbeiter() { titel = "Herr", vorname = "Sascha", nachname = "Nierbach" }); dataGridAusgabe.Add(new Mitarbeiter() { titel = "Frau", vorname = "Nicole", nachname = "Russmann" }); dataGrid.ItemsSource = dataGridAusgabe; public class Mitarbeiter { public string titel { get; set; } public string vorname { get; set; } public string nachname { get; set; } }
jetzt würde ich gerne wissen, wie die Hintergrundfarbe von jeder Reihe festlegen kann?
Gruesse, NUNUI
Donnerstag, 14. August 2014 21:27
Antworten
-
Hi,
zur Gestaltung der Hintergrundfarbe von Zeilen im DataGrid kann man das LoadingRow-Ereignis nutzen. Nachfolgend ein Beispiel in VB.NET.Private Sub News_LoadingRow(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridRowEventArgs) Dim r = TryCast(e.Row.DataContext, meinRowTyo) If r.Freigegeben Then e.Row.Background = New SolidColorBrush(Color.FromArgb(63, 0, 255, 0)) Else e.Row.Background = New SolidColorBrush(Color.FromArgb(31, 255, 0, 0)) End If End Sub
--
Peter- Als Antwort markiert Nunui Montag, 18. August 2014 20:05
Sonntag, 17. August 2014 05:53 -
Hallo,
dein Code müsste so aussehen:private void dataGrid_LoadingRow(object sender, DataGridRowEventArgs e) { var r = e.Row.DataContext as Mitarbeiter;//Das Item, das die Zeile mit Daten füllt if (r.titel == "Herr")//Farbe anhand von Eigenschaft(en) auswählen { e.Row.Background = new SolidColorBrush(Color.FromArgb(63, 0, 255, 0)); } else { e.Row.Background = new SolidColorBrush(Color.FromArgb(31, 255, 0, 0)); }
Oder alternativ:
}var rowNumber = (dataGrid.ItemsSource as IList<Mitarbeiter>).IndexOf(e.Row.DataContext as Mitarbeiter);//Zeilenindex bestimmen, beispielsweise für alternierende Farben switch (rowNumber % 3) { case 0: e.Row.Background = new SolidColorBrush(Color.FromArgb(63, 255, 255, 0)); break;//Farbe für 1. Zeile case 1: e.Row.Background = new SolidColorBrush(Color.FromArgb(255, 63, 255, 0)); break;//Farbe für 2. Zeile case 2: e.Row.Background = new SolidColorBrush(Color.FromArgb(255, 255, 63, 0)); break;//Farbe für 3. Zeile }
PS: Für alternierende Farben mit nur 2 verschiedenen Hitergründen, kannst du auch meine andere Antwort mit dem XAML Code verwenden.
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Bearbeitet Tom Lambert (Koopakiller) Montag, 18. August 2014 14:40 PS
- Als Antwort markiert Nunui Montag, 18. August 2014 20:04
Montag, 18. August 2014 14:39
Alle Antworten
-
Hi,
zur Gestaltung der Hintergrundfarbe von Zeilen im DataGrid kann man das LoadingRow-Ereignis nutzen. Nachfolgend ein Beispiel in VB.NET.Private Sub News_LoadingRow(ByVal sender As System.Object, ByVal e As System.Windows.Controls.DataGridRowEventArgs) Dim r = TryCast(e.Row.DataContext, meinRowTyo) If r.Freigegeben Then e.Row.Background = New SolidColorBrush(Color.FromArgb(63, 0, 255, 0)) Else e.Row.Background = New SolidColorBrush(Color.FromArgb(31, 255, 0, 0)) End If End Sub
--
Peter- Als Antwort markiert Nunui Montag, 18. August 2014 20:05
Sonntag, 17. August 2014 05:53 -
Hallo,
wie genau wilst du denn die Hintergrundfarbe festlegen? Für komplexe Dinge kannst du, wie von Peter vorgeschlagen, das LoadingRow-Ereignis nutzen.Wenn du allerdings einfach abwechselnde Farben haben willst, reichen auch 2 Eigenschaft im XAML aus:
<sdk:DataGrid AlternatingRowBackground="Red" RowBackground="Green"
Das Ergebnis:
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Bearbeitet Tom Lambert (Koopakiller) Sonntag, 17. August 2014 14:00
- Als Antwort vorgeschlagen techniker-support Montag, 18. August 2014 07:57
Sonntag, 17. August 2014 13:54 -
Danke für eure Antworten und entschuldige auch meine späte Antwort.
Ich habe den Code in C# koventieren lassen und habe folgende Code erhalten:
private void News_LoadingRow(System.Object sender, System.Windows.Controls.DataGridRowEventArgs e) { dynamic r = e.Row.DataContext as meinRowTyo; if (r.Freigegeben) { e.Row.Background = new SolidColorBrush(Color.FromArgb(63, 0, 255, 0)); } else { e.Row.Background = new SolidColorBrush(Color.FromArgb(31, 255, 0, 0)); } }
Bekomme aber leider die Fehlermeldung:
Fehler 5 Der Typ- oder Namespacename "meinRowTyo" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) Fehler 1 Der vordefinierte Typ "Microsoft.CSharp.RuntimeBinder.Binder" ist nicht definiert oder importiert.
Gruesse, NUNUI
Montag, 18. August 2014 11:22 -
Hallo,
dein Code müsste so aussehen:private void dataGrid_LoadingRow(object sender, DataGridRowEventArgs e) { var r = e.Row.DataContext as Mitarbeiter;//Das Item, das die Zeile mit Daten füllt if (r.titel == "Herr")//Farbe anhand von Eigenschaft(en) auswählen { e.Row.Background = new SolidColorBrush(Color.FromArgb(63, 0, 255, 0)); } else { e.Row.Background = new SolidColorBrush(Color.FromArgb(31, 255, 0, 0)); }
Oder alternativ:
}var rowNumber = (dataGrid.ItemsSource as IList<Mitarbeiter>).IndexOf(e.Row.DataContext as Mitarbeiter);//Zeilenindex bestimmen, beispielsweise für alternierende Farben switch (rowNumber % 3) { case 0: e.Row.Background = new SolidColorBrush(Color.FromArgb(63, 255, 255, 0)); break;//Farbe für 1. Zeile case 1: e.Row.Background = new SolidColorBrush(Color.FromArgb(255, 63, 255, 0)); break;//Farbe für 2. Zeile case 2: e.Row.Background = new SolidColorBrush(Color.FromArgb(255, 255, 63, 0)); break;//Farbe für 3. Zeile }
PS: Für alternierende Farben mit nur 2 verschiedenen Hitergründen, kannst du auch meine andere Antwort mit dem XAML Code verwenden.
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Bearbeitet Tom Lambert (Koopakiller) Montag, 18. August 2014 14:40 PS
- Als Antwort markiert Nunui Montag, 18. August 2014 20:04
Montag, 18. August 2014 14:39