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...
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
Vous devez vous connecter pour publier un commentaire.
Si vos données sont dans une collection, vous devriez être en mesure d'utiliser le
BindingListView
de la bibliothèque d'ajouter facilement des fonctionnalités de tri à votre DGV. Voir Comment puis-je mettre en œuvre le tri automatique des DataGridView? et ma réponse à Comment faire pour Trier les WinForms DataGridView lié à EF EntityCollection<T> pour plus d'informations et des extraits de code.OriginalL'auteur Pat