2011-08-17 9 views
1

:クラスを通じてDataTableのコンテンツをスコープの終わりまで生き残るには?私はそうのような私のクラスの先頭で宣言されたDataTable持っ

private DataTable table = new TestData().FillTable(); 

を、私はテーブルの内容にアクセスすることができますよ。

しかし、私は、DataTableの内容を変更するGridViewの並べ替えイベントを持っています。イベント自体の中で、内容が変更され、デバッグを通じてこれを確認しました。ただし、このメソッドの外のどこからでもテーブルを呼び出すと、DataTableの内容は以前と同じ状態になります。つまり、ソートイベントのスコープが終了すると新しい値が消去されるようです。ここで

は私の並べ替えイベントのコードです:私は上記のイベント内のテーブルの内容をテストする場合

protected void TableGridView_Sorting(object sender, GridViewSortEventArgs e) 
    { 
     table.DefaultView.Sort = "GroupNumber, " + e.SortExpression + GetSortDirectio(e.SortExpression); 
     TableGridView.DataSource = table; 
     TableGridView.DataBind(); 
    } 

、新しい値が追加されているように見えます。ただし、他のメソッドからテーブルを呼び出すと、古い値が返されます。

私は、テーブルの内容は、すなわち私のクラスの先頭で宣言した変数に、世界的に更新させる、および方法に応じて、異なる状態を持っていないために何ができますか?

+0

this.tableを使用している特定の理由はありますか?クラス変数の場合は、この変数をそのまま使用してください。しかし、再び、これは私が推測する答えではありません。ちょうど試して。くそー、私は「この」あまりにも、まだdoesntの作業をせずに試してみた – Zenwalker

+0

:(私は仕事にここにIDEを持っていたい:/ –

+0

その奇妙な、でもMSDNは、新たなDTが作成され、返されると言う – Zenwalker

答えて

1

私はこれをGridView Sortingイベントでテストしました。並べ替えイベントを残すthis.tableにはソートされた値が含まれているため、exptectedとして機能します。単一ページのリクエストでソリューションをテストしていますか? PostBackの後にthis.tableがTestData()。FillTable()から再度割り当てられます。

+0

これは問題です、あなたが正しいです。それをテストしただけで、イベントの後に十分に確かめられれば、テーブルはTestData()から割り当てられます。FillTable()。どのように私はそれを行うことを防ぐことができますか? –

+0

ソートされたDataTableクラスフィールドが必要な理由がわかりませんので、私のソリューションはあなたにとって不適切かもしれません。まず、GridViewでDataKeyNamesプロパティを割り当てる必要があります。次に、YourGridViewObject.DataKeysコレクションを使用して、現在バインドされている行の順序を取得できます。 Page_LoadでDataTableを読み込み、DataKeyNameを使用してDataTableを並べ替えます。他のソリューションは、ViewState(ページサイズへの影響)またはSession(サーバーのメモリとパフォーマンスへの影響)にDataTableをシリアル化することです。データベースを使用することもできます。あなたは[リンク](http://www.asp.net/web-forms)の詳細情報を見つけることができます – muzieh

+0

素晴らしい情報をありがとう:)私はDataKeynameメソッドを使用しようとしているでしょうが、並べ替えが完了すると、再度GridViewがデータバインドされることを考慮してください。私。グリッドビューは前に追加されたDataKeyname値を失いますか? –

関連する問題