Как отсортировать 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, но создание класса, наследующего один из этих интерфейсов, не решает проблему.

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

1 ответ

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

Другие вопросы по тегам