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.
DataGrid nie ma takigo ficzera. Trzeba samemu to oprogramować.
Multivalue converter przyjmujący element i kolekcję. Zwraca indexOf i to cała filozofia. Nie mam jak napisać kodu bo na Phone jestem
@gswidwa1: Dzięki poczytam.
@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
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
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).
@neves: Dzięki, będę próbował tak do tego podejść.