ciao,
la cosa è 1po complessa, ma non impossibile, e quest'ultima è sempre una buona notizia.
Quello che manca a te è sostanzialmente di "overridare" il metodo Sort ,quindi diciamo implementarlo, ma prima di fare questo devi "overridare" anche altre proprieta' per prenderti la proprieta' selezionata per ordinare e la direzione, ma la cosa piu' importante è dirgli che puo' essere ordinabile, ovvero SupportsSrotingCore.
Tante chiacchiere, meglio 1 esempietto chiarificatore:
public class SortableBindingList<T> : BindingList<T>
{
//---- prendo le proprieta' che mi serviranno poi per fare il mio ordinamento
private ListSortDirection m_Direction = ListSortDirection.Ascending;
private PropertyDescriptor m_SortProperty;
protected override ListSortDirection SortDirectionCore
{ get { return m_Direction; } }
protected override PropertyDescriptor SortPropertyCore
{ get { return m_SortProperty; } }
//-- come vedi torna sempre true cosi' fai capire alla griglia che puo' ordinare la collezione
protected override bool SupportsSortingCore
{ get { return true; } }
//-- questo è il posto dove farai tu l'ordinamento, in base alle proprieta'
protected override void ApplySortCore(PropertyDescriptor property, ListSortDirection direction)
{
List<T> items = this.Items as List<T>;
if (items != null)
{
m_Direction = direction;
m_SortProperty = property;
items.Sort(new Comparison<T>(confronto));
}
}
//---- questo effettivcamente fa il confronto
private int confronto(T obj1, T obj2)
{
int Ris = 0;
Ris =((IComparable)m_SortProperty.GetValue(obj1)).CompareTo(m_SortProperty.GetValue(obj2));
if (m_Direction == ListSortDirection.Descending)
Ris = -Ris;
return Ris;
}
}
tipicamente io uso questo, ma stai attento che il confronto non tiene conto dei nulli e di altri strutture complesse, cmq penso che con questo esempio tu possa fare delle prove e delle raffinatezze in questa direzione e quindi riuscire tranquillamente...
ciao.
Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo