Ich habe eine DataGridView, deren Datenquelle eine BindingList ist. MyObj hat einige Nullable-Eigenschaften (wie int? Und DateTime?). Ich möchte die Sortierung in meine Bindungsliste implementieren, sodass DataGridView die Spalte sortieren kann, wenn der Benutzer auf die Spaltenüberschrift klickt.Int32? mit IComparable
Nach einigem Suchen fand und befolgte ich die Antwort auf diese Frage (DataGridView Column sorting with Business Objects).
Ich kann diese Lösung nicht für Nullable Typen arbeiten, da sie IComparable nicht implementieren. Auch für Klassen, die IComparable wie String implementieren, schlägt ApplySortCore (...) fehl, wenn der String einen Nullwert hat.
Gibt es dafür eine Lösung? Oder muss ich eine Wrapper-Klasse für "Int32?" ?
zB
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
}
Vielen Dank. Ich muss auch _sortPropertyValue = prop; _sortDirectionValue = Richtung; _isSortedValue = true; , damit der Code funktioniert. Vielen Dank :) – David
Re "Vergleichen/Sortieren auf Nullable Eigenschaften sollte kein Problem sein." - es sei denn, die Eigenschaft hat den Wert "null". In diesem Fall erhalten Sie eine Laufzeitausnahme. (Ich nehme an - ich habe es nicht ausprobiert.) – ToolmakerSteve
@ToolmakerSteve, 'OrderBy' und' OrderByDescending' haben nichts dagegen, wenn die Eigenschaft 'null' zurückgibt. Der Standard-Comparer, den er verwendet, sortiert oben die Werte 'null'. Sie werden nur dann ein Problem haben, wenn die Liste selbst einen 'Null'-Eintrag enthält. – Ruben