Как отсортировать данные из DataGridView с автоматически сгенерированными столбцами из BindingList? - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть DataGridView, который получает BindingList

dataGrid.DataSource = new BindingList<Value>(ValueList);

После того, как я пытаюсь установить SortMode

dataGrid.Columns.OfType<DataGridViewColumn>().ToList()
    .ForEach(c =>
    {
        c.SortMode = DataGridViewColumnSortMode.Automatic;
    });

Точка останова останавливается на нем,но мой DataGridView не сортируется ... Я пытаюсь нажать на заголовки, и ничего не происходит.

Эти столбцы генерируются автоматически, что я могу сделать, чтобы иметь возможность сортировать данные?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2012

Когда DataGridView связывается с DataSource ( DataView, BindingSource, Table, DataSet + "tablename" ), во всех случаях оно ссылается на DataView.Получите ссылку на этот DataView и установите Сортировка Фильтр ) по вашему желанию:

DataView dv = null;
CurrencyManager cm = (CurrencyManager)(dgv.BindingContext[dgv.DataSource, dgv.DataMember]);

if (cm.List is BindingSource)
{
    // In case of BindingSource it may be chain of BindingSources+relations
    BindingSource bs = (BindingSource)cm.List;
    while (bs.List is BindingSource)
    { bs = bs.List as BindingSource; }

    if (bs.List is DataView)
    { dv = bs.List as DataView; }
}
else if (cm.List is DataView)
{
    // dgv bind to the DataView, Table or DataSet+"tablename"
    dv = cm.List as DataView;
}

if (dv != null)
{
    dv.Sort = "somedate desc, firstname";
    // dv.Filter = "lastname = 'Smith' OR lastname = 'Doe'";

    //  You can Set the Glyphs something like this:
    int somedateColIdx = 5;    // somedate
    int firstnameColIdx = 3;   // firstname
    dgv.Columns[somedateColIdx].HeaderCell.SortGlyphDirection = SortOrder.Descending;
    dgv.Columns[firstnameColIdx].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
}

Примечание: Названия столбцов, используемые в Сортировке и Фильтре, соответствуютдля имен столбцов в DataTable имена столбцов в DataGridView - это имена элементов управления, используемых для отображения ячеек в dgv.Вы можете использовать имя столбца в DataView следующим образом:

string colName = dgv.Columns[colIdx].DataPropertyName

Зависит от того, как вы хотите отслеживать отсортированные столбцы (colSequence, colName, asc / desc, dgvColIdx), вы можете решить, как создать Sort и Filter.выражение и установить SortGlyph в dgv (я сделал жесткий код для простоты).

0 голосов
/ 16 мая 2011

Я считаю, что проблема заключается в том, что вам нужно создать собственный список привязок, который реализует необходимые функции сортировки, чтобы DataGridView знал, как сортировать каждый столбец.

Этот пост содержит полезную информацию о том, как начать сортировку:

http://xiaonanstechblog.blogspot.com/2009/03/how-to-enable-column-sorting-on.html

Если вы хотите отфильтровать и отсортировать, вы можете выполнить пользовательскую реализациюИнтерфейс IBindingListView:

http://msdn.microsoft.com/en-us/library/system.componentmodel.ibindinglistview.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...