Numer wiersza w DataGrid WPF

0

Witam,
W jaki sposób mogę wyświetlić w pierwszej kolumnie numer wiersza.
Chodzi o to tzw liczbę porządkową, która w przypadku operacji usunięcia czy dodania rekordu zostanie automatycznie zaktualizowana.

0

DataGrid nie ma takigo ficzera. Trzeba samemu to oprogramować.

0

Multivalue converter przyjmujący element i kolekcję. Zwraca indexOf i to cała filozofia. Nie mam jak napisać kodu bo na Phone jestem

0

@gswidwa1: Dzięki poczytam.

0

@gswidwa1: Oparłem się o ten przykład

internal class RowNumberConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            DataGridRow row = value as DataGridRow;
            if (row == null)
                throw new InvalidOperationException("This converter class can only be used with DataGridRow elements.");
 
            return row.GetIndex() + 1;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }

W xml mam natomiast taki wpis:

<DataGridTextColumn Header="No" Binding="{Binding Path=., 
                        RelativeSource={RelativeSource AncestorType=DataGridRow},
                        Converter={StaticResource converter}}"/>

I pojawia się taki problem, że na początku wszystko wygląda ok, do momentu przewinięcia danych za pomocą scrolla. Gdy przewijam dane, liczby zaczynają pojawiać się losowo ( co przewinięcie rekord ma inny numer ).
Nie wiem czy do końca dobrze to rozumiem.
Pozdrawiam

0

Wychodzi na to, że podczas każdego ticka scrolla próbuje odświeżyć wszystkie wiersze i się coś krzaczy.
popatrzyłem trochę i tutaj ktoś sobie z tym poradził (nie sprawdzałem, czy działa):
https://stackoverflow.com/questions/4661998/simple-way-to-display-row-numbers-on-wpf-datagrid

3

Kontrolki wyświetlające kolekcje w WPF są zwykle wirtualizowane, istnieją te wiersze które widać plus mały bufor.

Najlepiej to normalnie po ludzku oprogramować to tak, jak to się robi z IsSelected, a nie kombinować jak koń pod górę. Dodać do VM reprezentującej wiersz Nr i uaktualniać wszystkie numery gdy zawartość kolekcji wierszy się zmienia. Tak będzie najprościej. Jak mamy wiele tabel i rzeczywiście potrzebujemy generyczne rozwiązanie to można spróbować napisać AP (Attached property).

0

@neves: Dzięki, będę próbował tak do tego podejść.

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