重新加载后DataGridView保存过滤

Posted

技术标签:

【中文标题】重新加载后DataGridView保存过滤【英文标题】:DataGridView save filtering after reload 【发布时间】:2011-03-29 09:30:24 【问题描述】:

我对 C# 中的 DataGridView 有一些问题。

案例是:

我对数据库进行了一些更新,然后用新值重新加载 DataGridView:

myDataGridView.DataSource = myDataSet.Tables[0]

一切正常,但最近有人问我是否有可能在重新加载数据后保持应用相同的列过滤?

做这个过滤案例的方法是什么?

感谢您的任何想法。

【问题讨论】:

【参考方案1】:

好的,我找到了解决方案,也许它会对某人有所帮助: [顺便提一句。我犯了一些语言错误过滤=排序;-)]

   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;

我使用了来自link text的部分代码

【讨论】:

【参考方案2】:

我采用了 kuba 的解决方案,并将它放在一个实用程序类中,我可以在任何 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);

【讨论】:

【参考方案3】:

在遇到问题之前,我遇到了 Adam Nofsinger 的回答,但我还是使用了它。它工作得很好。

只需将这两行 using 添加到我的类文件中:

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

谢谢, 吉尔特。

【讨论】:

【参考方案4】:

这对我有用:



    //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); 

【讨论】:

以上是关于重新加载后DataGridView保存过滤的主要内容,如果未能解决你的问题,请参考以下文章

重新加载后带有特殊字符的jqGrid过滤器问题

UICollectionview 在使用 Core Data 保存实体后重新加载数据

datagridview 对其中的数据操作了 怎么 重新加载 显示操作后的数据 显示才操作后的表

将过滤后的 Datagridview 导出为 excel 或 pdf (SQL Server)

(急)c#中datagridview表中删除行后重新加载后删除的行会变成空白行。数据是没有了,空白行是啥情况?

编辑后C#保存DataGridView(覆盖导入的Excel文件)