- - PR -
DatatableとSessionについて
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-08 21:16
Gridviewを配置して、以下のようにDatatableからBindするようにします。
最初はSessionに保存して、2回目以降はSessionに保存しないようにすると 10,10,10・・・ となりそうですが、10,15,20・・・となります。 これは何かの設定に問題があるのでしょうか。 Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load Dim tb As New DataTable Dim dr As DataRow If Not Page.IsPostBack Then If Session("x") Is Nothing Then tb.Columns.Add("x", Type.GetType("System.Int32")) dr = tb.NewRow() dr("x") = 10 tb.Rows.Add(dr) Session("x") = tb Else tb = Session("x") tb.Rows(0)("x") = tb.Rows(0)("x") + 5 End If End If GridView1.DataSource = Session("x") GridView1.DataBind() End Sub | ||||||||
|
投稿日時: 2008-04-08 21:57
| ||||||||
|
投稿日時: 2008-04-09 05:06
すみません。あまり良くわかってないのかもしれませんが、
"x" を"y"に変えても同じ結果になってしまいます。 Protected Sub form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles form1.Load Dim tb As New DataTable Dim dr As DataRow If Not Page.IsPostBack Then If Session("x") Is Nothing Then tb.Columns.Add("y", Type.GetType("System.Int32")) dr = tb.NewRow() dr("y") = 10 tb.Rows.Add(dr) Session("x") = tb Else tb = Session("x") tb.Rows(0)("y") = tb.Rows(0)("y") + 5 End If End If GridView1.DataSource = Session("x") GridView1.DataBind() End Sub | ||||||||
|
投稿日時: 2008-04-09 08:02
べるさんが書かれている通りで、同じものを参照してます。
(DataTableの参照について注目すればわかるのでは。。) | ||||||||
|
投稿日時: 2008-04-09 09:00
元々
Session("x") のxと tb.Rows(0)("x") のxは関係ないので、yに変えても同じことです。 tb = Session("x") ここでイコールの関係にしてますよね。だから tb.Rows(0)("y") = tb.Rows(0)("y") + 5 この代入は Session("x").Rows(0)("y") = tb.Rows(0)("y") + 5 と同じことです。 | ||||||||
|
投稿日時: 2008-04-09 21:46
というわけで、POST せずに GET すれば、どんどん加算されます。 | ||||||||
|
投稿日時: 2008-04-11 05:16
皆様ありがとうございます。
参照型変数という基本的なところが解ってなかったようです。 甘えついでに追加の質問です。 もともと、1回目のリクエストをSessionに退避、2回目以降をdatatabelで加工して(例えば、小計の表示など)GridViewに表示、Sessionに退避した情報(小計が無い情報)は別で使用、ということがやりたかったのです。 このような場合、どうするのが最善策でしょうか。 |
1