重新加载后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保存过滤的主要内容,如果未能解决你的问题,请参考以下文章
UICollectionview 在使用 Core Data 保存实体后重新加载数据
datagridview 对其中的数据操作了 怎么 重新加载 显示操作后的数据 显示才操作后的表
将过滤后的 Datagridview 导出为 excel 或 pdf (SQL Server)