Wstawianie wiersza o zadanym kolorze do DataGrid w Wpf

0

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ć ?

0

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.

0

Jak to wstawiam to mi wyświetla że ten row jest nullem, pomimo tego że tabela jest zapełniona wpisami.

0

"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ą.

0
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.

0

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
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1