DataGridView сохранить фильтрацию после перезагрузки - PullRequest
4 голосов
/ 13 августа 2010

У меня есть некоторая проблема с DataGridView в C #.

случай:

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

myDataGridView.DataSource = myDataSet.Tables[0]

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

Каков подход к этому случаю фильтрации?

Спасибо за любые идеи.

Ответы [ 4 ]

14 голосов
/ 14 августа 2010

Хорошо, я нашел решение, может быть, оно кому-нибудь поможет: [кстати.Я сделал несколько ошибок фильтрации языка = сортировка; -)]

   DataGridViewColumn oldColumn = dataGridView1.SortedColumn;

   ListSortDirection direction;
   if (dataGridView1.SortOrder == SortOrder.Ascending) direction = ListSortDirection.Ascending;
   else direction = ListSortDirection.Descending;

   databaseUpdateFunction();

   DataGridViewColumn newColumn = dataGridView1.Columns[oldColumn.Name.ToString()];
   dataGridView1.Sort(newColumn,direction);
   newColumn.HeaderCell.SortGlyphDirection =
                    direction == ListSortDirection.Ascending ?
                    SortOrder.Ascending : SortOrder.Descending;

Я использовал части кода из: текст ссылки

7 голосов
/ 11 февраля 2011

Я взял решение Кубы и поместил его в служебный класс, который могу использовать на любом DataGridView:

    private static ListSortDirection _oldSortOrder;
    private static DataGridViewColumn _oldSortCol;

    /// <summary>
    /// Saves information about sorting column, to be restored later by calling RestoreSorting
    /// on the same DataGridView
    /// </summary>
    /// <param name="grid"></param>
    public static void SaveSorting(DataGridView grid)
    {
        _oldSortOrder = grid.SortOrder == SortOrder.Ascending ?
            ListSortDirection.Ascending : ListSortDirection.Descending;
        _oldSortCol = grid.SortedColumn;
    }

    /// <summary>
    /// Restores column sorting to a datagrid. You MUST call this AFTER calling 
    /// SaveSorting on the same DataGridView
    /// </summary>
    /// <param name="grid"></param>
    public static void RestoreSorting(DataGridView grid)
    {
        if (_oldSortCol != null)
        {
            DataGridViewColumn newCol = grid.Columns[_oldSortCol.Name];
            grid.Sort(newCol, _oldSortOrder);
        }
    }

Использование этого выглядит следующим образом:

GridUtility.SaveSorting(grid);    
grid.DataSource = databaseFetch(); // or whatever
GridUtility.RestoreSorting(grid);
0 голосов
/ 07 декабря 2018

Это сработало для меня:



    //preserve existing sort column and direction
    ListSortDirection direction;
    DataGridViewColumn oldsort = MyDataGridView.SortedColumn;
    if (MyDataGridView.SortOrder == SortOrder.Ascending)
    {   direction = ListSortDirection.Ascending; } else { direction = ListSortDirection.Descending; }

    //this is refresh
    MyDataGridView.DataSource = data;

    //reapply sort and direction
    if (oldsort != null) { MyDataGridView.Sort(MyDataGridView.Columns[oldsort.Name], direction); }

0 голосов
/ 03 мая 2017

Я столкнулся с ответом Адама Нофсингера, прежде чем столкнулся с проблемой, но все равно использовал его. Это работает замечательно.

Просто нужно добавить эти 2 , используя строки в мой файл класса:

using System.ComponentModel; 
using System.Windows.Forms;

Спасибо, Герт.

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