2010-11-22 20 views
1

私は、開始時にデータベースからジョークを取得し、最初のジョークを画面に表示するアプリケーションを作成しました。次のボタンを押すと、2番目のジョークが表示されます。私が最初にジョークをつかむとき、私はそれらをグローバルに宣言されたデータテーブルに入れました。私は次のボタンを押したときにポストバック後にデータを維持する

Title.Value = dt.Rows[0]["joke_title"].ToString(); 
Detail.Value = dt.Rows[0]["joke_content"].ToString(); 

は今、私はこれらのコマンドを実行している:私はやっている最初のジョーク表示するには

Title.Value = dt.Rows[0+1]["joke_title"].ToString(); 
Detail.Value = dt.Rows[0+1]["joke_content"].ToString(); 

をしかし、次のボタンがヒットしたとき、ページのポストバックと私はdatatableの値を失う。データテーブル内のデータを失うことなくエラーを解決するにはどうすればよいですか?

+0

"グローバルに宣言されたデータテーブル"とは、具体的にはどういう意味ですか? – Carson63000

答えて

3
i put them in a globally declared datatable 

このデータテーブルはどこで宣言されていますか?あなたのページクラスで?このコードを私たちに見せてもらえますか? ページクラスにある場合は、ポストバックを超えて永続化されません。ページクラスは要求ごとに新たに作成され、状態を保持しません。

ポストバック間の状態を維持する場合は、データテーブルの古い値を維持できるように、Viewstate/Sessionのような状態管理メカニズムを使用する必要があります。

+0

セッション変数にdatatableを入れるにはどうすればいいですか? –

+2

セッション["SomeUniqueKey"] = datatable; – InSane

1

ページがレンダリングされると、そのページのクラスで作成されたすべてのオブジェクトが破棄されます。今、ポストバックが発生すると、データテーブルにはデータが含まれません。ポストバックを介してデータを永続化するには、InSaneのようにどこかに格納する必要があります。データテーブルに行が非常に少ない場合は、Sessionオブジェクトを使用するのが最善の方法です。その後、PageLoadイベントハンドラの開始時

​​

、そのポストバックするかどうかをチェックし、再びセッションからデータテーブルをお読みください。

あなたは、データベースから行を取得すると、セッションにデータテーブルを格納します。

if(this.IsPostBack == true) 
{ 
    DataTable dt = (DataTable)Session["myTable"]; 
} 
else 
{ 
    // fetch the records from database 
} 

データテーブルはセッション間で使用できないことに注意してください。

0

これは静的なデータテーブルでも解決できます。ただし、データテーブルはすべてのスレッドで静的になります。

関連する問題