2010-08-13 100 views
4

我在C#中的DataGridView有一些問題。DataGridView保存過濾後重新加載

的情況是:

我做數據庫的一些更新,然後我重裝的DataGridView用新值:

myDataGridView.DataSource = myDataSet.Tables[0] 

一切正常,但最近有人問我,如果有可能保持在同一列過濾後重新加載數據?

做這個過濾案例的方法是什麼?

感謝您的任何想法。

回答

11

好吧,我找到了解決方案,也許它會幫助別人: [順便說一句。我做了一些語言錯誤過濾=排序;-)]

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

+0

您應該將此標記爲答案,並且謝謝! – 2011-02-11 15:13:17

5

我把庫巴的解決方案,並把它放在一個工具類,我可以在任何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

我來了在我遇到問題之前跨過Adam Nofsinger的回答,但無論如何我仍然使用它。它工作非常有趣。

只需要使用線這2 添加到我的類文件:

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

感謝, 海爾特。