Как отсортировать DataGridView, привязанный к коллекции настраиваемых объектов?

Итак, я следовал этому руководству по привязке данных в элементах управления Windows Forms (MAD поддерживает автора, это отличное руководство), и я использовал его для создания собственного класса и привязки DataGridView к коллекции этого класса:

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; } }
}

На этом этапе я импортирую кучу данных из различных баз данных SQL для заполнения таблицы, и это отлично получается. Это руководство даже является отличной отправной точкой для добавления фильтров, которым я собираюсь следовать чуть позже. Однако пока я застрял на сортировке моих только что сгенерированных DataGridView. Осмотревшись, я обнаружил, что DataGridView имеет свой собственный метод сортировки, который можно использовать, например, так:

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

Однако, когда я пытаюсь это сделать, я получаю InvalidOperationException, который сообщает мне: «Элемент управления DataGridView не может быть отсортирован, если он привязан к IBindingList, который не поддерживает сортировку». Я нашел интерфейсы IBindingList и IBindingListView, но наследование моего класса любого из этих интерфейсов не решает проблемы.

Как мне это сделать? Я здесь совсем застрял ...


person Abion47    schedule 27.06.2012    source источник
comment
Многие из них доступны в Google, например, путем поиска в сортируемом списке привязок C #. Обычно вы наследуете от BindingList<T> и реализуете SupportsSortingCore.   -  person Michael    schedule 28.06.2012
comment
Думаю, это работает. Моя основная проблема заключалась в том, что я не искал правильные фразы: P Просто оставлю эту ссылку здесь на случай, если кто-то еще захочет ее увидеть. codeproject.com/Articles/31418/   -  person Abion47    schedule 28.06.2012
comment
Альтернативное решение описано здесь: stackoverflow.com/a/28520948/3317709.   -  person Ravi M Patel    schedule 15.02.2015


Ответы (1)


Если ваши данные находятся в коллекции, вы сможете использовать BindingListView библиотеку, чтобы легко добавлять возможности сортировки в ваш DGV. См. Как реализовать автоматическую сортировку DataGridView? и мою ответ на Как отсортировать WinForms DataGridView, привязанный к EF EntityCollection ‹T› для получения дополнительной информации и фрагментов кода.

person Pat    schedule 30.07.2013