Witam czy istnieje możliwość aby podczas wstawiania wiersza do kontrolki DataGrid nadać mu określony kolor. Chodzi o WPF oraz język C#. Jak to zrobić ?
Od strony XAML można wykorzystać właściwość RowStyle, dokładnie tak, jak pokazano w dokumentacji.
Jeśli chciałbyś robić to od strony kodu, to można zrobić po prostu:
var row = (DataGridRow)dataGrid.ItemContainerGenerator.ContainerFromIndex( rowNumber );
row.Background = new SolidColorBrush(Color.FromArgb(100, 255, 104, 0));
Najlepiej opisuje to ta odpowiedź na SO.
Jak to wstawiam to mi wyświetla że ten row jest nullem, pomimo tego że tabela jest zapełniona wpisami.
"to" czyli rozwiązanie z XAML, czy "to" czyli rozwiązanie od strony kodu?
Pytałeś o sposób, w jaki ustawić kolor podczas wstawiania wiersza.
Jeśli chcesz rozwiązania na inne problemy, to najlepiej byś wrzucił kod, bo rozwiązanie, które podałem powinno działać, więc pewnie coś jest nie tak u Ciebie z implementacją.
private void PokolorujWiersz()
{
for (int i = 0; i < TabelaWyswietlajacaPrzeglady.Items.Count; i++)
{
var row = (DataGridRow)TabelaWyswietlajacaPrzeglady.ItemContainerGenerator.ContainerFromIndex(i);
row.Background = new SolidColorBrush(Color.FromRgb(0, 255, 0));
}
}
Błąd "Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu" linijka z row.Background, DataGrid jest zapełniony wartościami.
Z tego co czytam tutaj to pewnie kwestia wirtualizacji wierszy. Możesz ją wyłączyć w XAML, tak jak opisano to tutaj lub dodać warunek wyciągający wirtualny wiersz do widoku tak, jak w pierwszej przytoczonej odpowiedzi:
var row = (DataGridRow)TabelaWyswietlajacaPrzeglady.ItemContainerGenerator.ContainerFromIndex( i );
// jesli null to jest wirtualny
if( row is null )
{
// sprowadz do widoku
TabelaWyswietlajacaPrzeglady.ScrollIntoView(TabelaWyswietlajacaPrzeglady.Items[ i ]);
WaitFor(TimeSpan.Zero, DispatcherPriority.SystemIdle);
// i spróbuj ponownie
row = (DataGridRow)TabelaWyswietlajacaPrzeglady.ItemContainerGenerator.ContainerFromIndex( i );
}
else
{
// Nie jest wirtualny, mozna dzialac na wierszu normalnie
}