Mam DataGridView którego źródłem danych jest BindingList. MyObj ma kilka właściwości nullable (np. Int? I DateTime?) Chcę zaimplementować sortowanie do mojej listy powiązań, więc DataGridView może sortować kolumnę, gdy użytkownik kliknie nagłówek kolumny.Int32? z IComparable
Po krótkich poszukiwaniach znalazłem i podążałem za odpowiedzią na to pytanie (DataGridView Column sorting with Business Objects).
Nie mogę sprawić, aby to rozwiązanie działało z typami zerowymi, ponieważ nie implementują one IComparable. Nawet dla klas, które implementują IComparable takie jak String, ApplySortCore (...) zawodzi, gdy String ma wartość null.
Czy istnieje rozwiązanie tego problemu? Czy muszę zaimplementować klasę opakowania dla "Int32?" ?
np
public class Int32Comparable : IComparable
{
public int? Value { get; set; }
#region IComparable<int?> Members
public int CompareTo(object other)
{
// TODO: Implement logic here
return -1;
}
#endregion
}
Wielkie dzięki. Muszę również ustawić _sortPropertyValue = prop; _sortDirectionValue = kierunek; _isSortedValue = true; , aby kod zadziałał. Wielkie dzięki :) – David
Re "porównywanie/sortowanie na właściwościach zerowalnych nie powinno stanowić problemu." - chyba, że właściwość ma wartość 'null', w takim przypadku otrzymasz wyjątek środowiska wykonawczego. (Przypuszczam - nie próbowałem tego.) – ToolmakerSteve
@ToolmakerSteve, 'OrderBy' i' OrderByDescending' nie mają nic przeciwko, gdy właściwość zwraca 'null'. Domyślne narzędzie porównawcze, którego używa, posortuje wartości "null" na górze. Będziesz miał problem tylko wtedy, gdy sama lista zawiera wpis "null". – Ruben