

以下のようにDataGridViewのHeaderCellに  
DataGridViewAutoFilterColumnHeaderCellを設定して  
エクセルのオートフィルターの簡易版を実装しています。

[code]

    foreach (DataGridViewColumn col in DataGridView.Columns)  {
         col.HeaderCell = new DataGridViewAutoFilterColumnHeaderCell(col.HeaderCell);
     }
    
[/code]

現状フィルタ動作はこれで問題ないのですが、  
再検索時にフィルターを設定していた場合にフィルターの内容を保持したいです。  
（現状ではフィルターの選択は検索毎に解除されます。）

このためには検索前に一度フィルターで何を選択していたか保持して、  
検索後、DataGridViewの内容が更新された後に保持しておいたフィルター値で  
フィルタリングする必要があると考えています。

DataGridViewAutoFilterColumnHeaderCellの外からフィルター選択値の取得、  
フィルター値の設定とフィルタ動作をすることは可能でしょうか？  
それともヘッダー部分をカスタム部品化するしかないでしょうか？

よろしくお願いいたします。


CC BY-SA 3.0
2015-04-08T07:45:38.657
8902
2015-04-22T06:07:51.223
2015-04-22T06:07:51.223
9228
9222
question
c# winforms
C#のDataGridViewのオートフィルター値を再検索後も保持したいです


`DataGridViewAutoFilterColumnHeaderCell`の実装を確認すると、リセット時の動作は

[code]

    private void ResetFilter()
    {
        if (this.DataGridView == null) return;
        BindingSource source = this.DataGridView.DataSource as BindingSource;
        if (source == null || String.IsNullOrEmpty(source.Filter))
        {
            filtered = false;
            selectedFilterValue = "(All)";
            currentColumnFilter = String.Empty;
        }
    }
    
[/code]

となっており、`BindingSource`の`Filter`を指定しておけばリセットされないように見えます。


CC BY-SA 3.0
2015-04-08T11:28:27.463
8913
2015-04-08T11:28:27.463
5750
8902
answer