2012-01-23 14 views
6

類似の質問が存在する可能性がありますが、そのいずれも役立たないようです。だから私はより具体的なケースを説明しようと誰かが私を助けることができるかどうかを確認しようとします:)グリッドビュー内の列を動的に並べ替える方法

ここでは、私はtemplatefieldsとgridviewを持って、私はそれらの列示されています。したがって、ユーザーはビューを作成し、最初、2番目などのどの列を表示するかを決定します。

基本的に、グリッドにデータが読み込まれた直後に、列の順序を変更する必要があります。

簡単に聞こえますか?まあ、明らかにそうではありません。少なくとも私はそれをまだ達成できませんでした。

注意: - 私はAutogenerateColumnsをfalseに設定しました。 - SQLの選択列を変更すると、前の項目のために動作しません。 - コードで列を生成しないようにしたいと思います。

アイデア?

+0

列を動的に並べ替える方法は次のとおりです。http://stackoverflow.com/a/28611217/215752 – Hogan

答えて

18

コードビハインドでGridviewのColumnsコレクションを変更できます。したがって、これを行う1つの方法は、コレクションの現在の位置から列を削除し、新しい位置に列を挿入することです。例えば

、あなたはあなたができる最初の列であることを第二のカラムを移動したい場合:

var columnToMove = myGridView.Columns[1]; 
myGridView.Columns.RemoveAt(1); 
myGridView.Columns.Insert(0, columnToMove); 

あなたの周りにランダムにそれらをすべて移動する必要がある場合は、そのクローンを作成しようとする場合がありますフィールドコレクションは、あなたがそれらをになりたいために、それらすべてを再挿入、その後のGridViewでコレクションをクリアし、。

var columns = myGridView.Columns.CloneFields(); 
myGridView.Columns.Clear(); 
myGridView.Columns.Add(columns[2]); 
myGridView.Columns.Add(columns[0]); 
etc.. 

を、私はこのすべてがデータに結合した後に動作するかどうかを100%わからないんだけどので、そうしなければならない限り、私はPage_Initやbindinの前のどこかでそれをやりますg。

+0

これは素晴らしい機能でした!しかし、ただ一つのこと...私はOnRowCommandイベントでいくつかのロジックを適用するグリッド上のボタンを持っています。さて、行が並べ替えられた後、そのメソッドは決して実行されず、ボタンを押した後にいくつかの列も空になります。 – Ragalante

+0

'myGridView.Columns.CloneFields();を使用して見つかりましたが、すべての列オブジェクトも同様に(問題になる可能性があります)。たとえば、 'BoundField'から継承した独自のカスタムカラムを持っていれば、そのオブジェクトを' BoundField'だけクローンします。これを修正するには、次のようにします。 'myGridView.Columns.OfType ()。ToList();'これは、元の列オブジェクトへの参照を維持しながら新しいコレクションを作成するためです。 –

関連する問題