Повторное применение сортировки к DataGrid? - PullRequest
1 голос
/ 26 августа 2011

У меня есть DataGridView.

Я могу щелкнуть заголовки столбцов, чтобы отсортировать данные по тому, какой заголовок столбца я щелкну.

У меня есть некоторые функции, которые очищают DataGridView и заполняют его данными.У меня проблема в том, что индикация сортировки в определенном столбце (серый перевернутый или перевернутый треугольник) по-прежнему сохраняется, даже если данные не отсортированы по этому столбцу, поскольку они были просто загружены в DataGridView.

Можно ли как-нибудь повторно применить сортировку сразу после добавления новых данных?

Редактировать: Если это не очень легко, просто избавиться от серого днатреугольник вверх или вниз достаточно хорош, поэтому ясно, что данные не отсортированы.

Ответы [ 2 ]

0 голосов
/ 26 августа 2011

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

int? index = null;
int firstDisplayedRowIndex = 0;
int sortedColumnIndex = -1;
SortOrder sortOrder = SortOrder.Ascending;

if (dgv.CurrentRow != null)
{
    index = dgv.CurrentRow.Index;
    firstDisplayedRowIndex = dgv.FirstDisplayedScrollingRowIndex;

    if (dgv.SortedColumn != null)
    {
        sortedColumnIndex = dgv.SortedColumn.Index;
        sortOrder = dgv.SortOrder;
    }
}

// Repopulate grid...

if (index.HasValue)
{
    if (sortedColumnIndex > -1)
    {
        switch (sortOrder)
        {
            case SortOrder.Ascending:
                dgv.Sort(dgv.Columns[sortedColumnIndex], ListSortDirection.Ascending);
                break;
            case SortOrder.Descending:
                dgv.Sort(dgv.Columns[sortedColumnIndex],
                                        ListSortDirection.Descending);
                break;
                // SortOrder.None - or anthing else - do nothing
        }
    }

    dgv.Rows[index.Value].Selected = true;
    dgv.Rows[index.Value].Cells[0].Selected = true;
    dgv.FirstDisplayedScrollingRowIndex = firstDisplayedRowIndex;
    // Call any code that needs to know the selection might have changed
}
0 голосов
/ 26 августа 2011

Это должно сделать удаление

Column.HeaderCell.SortGlyphDirection = SortOrder.None;

Но если вы прочитаете это, вы сможете извлечь то, что вам нужно?

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