2009-10-29 9 views
7

Mam DataGrid WPF, którego używam z liczbą kolumn. Jedna z kolumn zawiera niektóre elementy, które czasami mają wartość null, co powoduje wyjątek podczas próby sortowania w tej kolumnie.Sortowanie WPF DataGrid w kolumnie z elementami pustymi

definicjach kolumn jest coś takiego:

<dg:DataGrid.Columns> 
    <dg:DataGridTextColumn Binding="{Binding MyObject.Field1}" Header="Field1" Width="Auto" /> 
    <dg:DataGridTextColumn Binding="{Binding MyObject.Field2.SubField}" Header="Field2" Width="Auto" /> 
</dg:DataGrid.Columns> 

Gdybym porządek na kolumnie pole1 to jest w porządku, gdybym porządek na kolumnie Pole2 i nie ma zerowy Pole2 obiektów jest w porządku, ale czasami są i DataGrid próbuje uporządkować na podpole (chyba) i uderza wyjątku null:

System.InvalidOperationException was unhandled 
    Message=The SortDescriptions added are not valid. The probable solutions are to set the CanUserSort on the Column to false, or to use SortMemberPath property on the Column, or to handle the Sorting event on DataGrid. 

próbowałem ustawienie SortMemberPath do „MyObject.Field2.SubField”, ale oczywiście tego nie naprawić go od Pole 2 wciąż jest niekiedy puste. Zastanawiałem się nad próbą użycia konwertera, w którym ustawiłem SortMemberPath i mam ten konwerter zwracać string.empty dla jakichkolwiek elementów zerowych, ale nie mógł go uruchomić.

Próbowałem również dodanie "TargetNullValue = {x: Static sys: String.Empty}" w powiązaniu z tych kolumn, ale nadal nie działa.

Wszelkie porady/sugestie będą najbardziej mile widziane. Dzięki, Będzie

+1

Możesz po prostu upewnić się, że twój obiekt nigdy nie jest pusty przy użyciu konwertera lub po prostu utworzyć instancję (jeśli jest pusta), gdy otrzymasz dane dla datagridu. –

Odpowiedz

9

Ogólna rada: Nie używaj SortMemberPath. Nie tylko z powodu problemu, który właśnie spotkałeś. Ale także dlatego, że są ultraslow.

Zamiast tego należy użyć właściwości CustomSort klasy ListCollectionView. Aby uzyskać więcej informacji, przeczytaj "Improving Microsoft DataGrid CTP sorting performance" i "Improving Microsoft DataGrid CTP sorting performance - Part 2". Chociaż mówi "Imporve Performance", pokazuje również, jak rozwiązać problem.

Mam nadzieję, że to pomoże :).

+0

Dzięki Anvaka, Świetne linki, wprowadziłem sortowanie niestandardowe jak powyżej, a nawet dla stosunkowo niewielkiego obciążenia danych w mojej sieci prędkość sortowania jest zauważalnie szybsza. Jedynym minusem jest to, że utraciłem możliwość robienia wielu sortów, ponieważ każdy nowy niestandardowy rodzaj zastępuje poprzedni. Próbuję znaleźć sposób, aby zrobić to teraz, może być nowe pytanie! – WillH

+0

dziękuję, to też był mój problem! http://stackoverflow.com/questions/4086234/wpf-toolkit-datagrid-sorting-with-null-values – Falcon