Comment trier un DataGridView qui est lié à une collection d'objets personnalisés?

J'ai donc été à la suite ce guide de la liaison de données sur les contrôles Windows Forms (MAD props pour l'auteur, ce guide est génial), et je l'ai utilisé pour créer une classe personnalisée et lier un DataGridView à une collection de cette classe:

class CompleteJobListEntry
{
private string _jobName;
private Image _jobStatus;
private DateTime _jobAddedDate;
private string _jobAddedScanner;
private string _jobAddedUser;
private string _jobLastActivity;
private DateTime _jobActivityDate;
private string _jobActivityUser;
public string JobName { get { return _jobName; } set { this._jobName = value; } }
public Image JobStatus { get { return _jobStatus; } set { this._jobStatus = value; } }
public DateTime JobAddedDate { get { return _jobAddedDate; } set { this._jobAddedDate = value; } }
public string JobAddedScanner { get { return _jobAddedScanner; } set { this._jobAddedScanner = value; } }
public string JobAddedUser { get { return _jobAddedUser; } set { this._jobAddedUser = value; } }
public string JobLastActivity { get { return _jobLastActivity; } set { this._jobLastActivity = value; } }
public DateTime JobActivityDate { get { return _jobActivityDate; } set { this._jobActivityDate = value; } }
public string JobActivityUser { get { return _jobActivityUser; } set { this._jobActivityUser = value; } }
}

À ce point, je importer un tas de données à partir de différentes bases de données SQL pour remplir le tableau, et il tourne très bien. Le guide fournit même un excellent point de départ pour l'ajout de filtres, dont j'ai l'intention de suivre un peu plus tard. Pour l'instant, je suis bloqué sur le tri de mes nouvellement générés DataGridView. En regardant autour, j'ai découvert que le DataGridView a sa propre méthode de Tri, utilisable comme:

completeJobListGridView.Sort(completeJobListGridView.Columns["JobName"], ListSortDirection.Ascending);

Cependant, lorsque j'essaie de faire ceci, j'obtiens une InvalidOperationException qui me dit "contrôle DataGridView ne peut être résolu si c'est lié à un IBindingList qui ne prend pas en charge le tri." J'ai trouvé le IBindingList et IBindingListView interfaces, mais en faisant ma classe hérite de l'une de ces interfaces ne résout pas le problème.

Comment dois-je faire? Je suis complètement coincé ici...

Il y a beaucoup de ces disponibles à partir de Google, par exemple par la recherche "C# sortable de liaison de la liste". En général, vous héritez de BindingList<T> et de mettre en œuvre SupportsSortingCore.
Cela fonctionne, je suppose. Mon principal problème était que je n'étais pas à la recherche, avec le droit de phrases 😛 vas laisser ce lien ici au cas où quelqu'un d'autre veut le voir. codeproject.com/Articles/31418/...
Une solution alternative est documenté ici : stackoverflow.com/a/28520948/3317709.
Une solution alternative est documenté ici : stackoverflow.com/a/28520948/3317709.

OriginalL'auteur Abion47 | 2012-06-27