2017-08-01 8 views
2

私はグリッドビューを使ってレコードを表示するページを持っています。今度は、ユーザーがGridViewビューをカスタマイズすることを許可しました。列の順序を変更したり、定義済みの列の一覧から列を削除したりしました。 OnPagePrerenderイベントGridViewからすべてのセルを削除し、ユーザーが選択した順序でセルを追加します。正常に動作しますが、PostBackが発生すると、例外がスローされます。グリッドビュー内の列を削除して並べ替えると、ポストバックにそれを保持する

ViewStateの読み込みに失敗しました。

これでセルはViewStateに保存されたセルと同じになりません。

私が望むのは、私が行ったこれらの変更を持続させることです。GridViewPostBack

+0

グリッドビューの状態を保存できますか? – Umair

答えて

0

あなたはVIEWSTATEGridView(またはあなたのデータレコード)を保存し、のみビューステートからGridviewをリロードする必要があります。

は、換言すれば、データのみを変更する必要がありますデータベースを照会していますが、つまりgridview、データがロードされた方法でそれを表示できるような方法は、動的SQLでrecordsetを構築する必要があります必要に応じて列の順序を変更してください。

次にrecordsetを変数viewstateに保存して、ポストバックが行われたときにgridviewを参照してください。

私は、行、列ではないと似た何かをした、とgridview制御はその深いレベルで操作されているとき、ええ、あなたはもうデフォルトdatasourceまたはdatasourceIDに頼ることはできません。

+0

私はこれをしましたが、大量のデータを持っています。私がviewstateに保持すると、ページの読み込みが増えます。私はビューステートにコレクションを格納し、その前のページのイベントのグリッドビューを再バインドしますが、問題はロード時間が長くなることです。 –

+0

申し訳ありませんが、それが私が知る唯一の方法です。 XML、Jsonなどからデータを取得することを検討してください。 – Fandango68

+0

ご意見ありがとうございました –

0

このため、新しいGridview列を作成する必要があります。

最初に列のコピーを作成します。 2番目に列の順序を変更します。

var columns = GridView1.Columns.CloneFields(); // makes a copy of gridview columns 
GridView1.Columns.Clear(); // remove all the columns 

// now make any order for your gridview columns 
GridView1.Columns.Add(columns[3]); // e.g. now your column 4 is placed at first position 
GridView1.Columns.Add(columns[0]); // here column 1 is placed at second position 
+0

私はこの作業を試みましたが、ポストバックを行うとデータがセルから削除されます。私はすべての列を追加していますが、ユーザーによって選択された列のみが追加されています –

関連する問題