求各位高人解答困惑:我的画面上有一个gridview
当前画面从session中取得上个画面传的一个类CfmListParam的值
执行了sql检索后进行榜定
之后gridview中可以对内容进行修改
之后点保存按钮后将各条被选中的数据进行更新部分代码如下:
Page_Load中 cfmLstParam = Nothing
cfmLstParam = New CfmListParam
cfmLstParam = DirectCast(Session("ConfirmStatus"), CfmListParam)
ilstCfmLst = Mapper.Instance().QueryForList("ConfirmStatus_SQL-CONFIRM-1", cfmLstParam)
Me.grdStatusList.DataSource = ilstCfmLst
Me.grdStatusList.DataBind() btnSave_Click中For i As Integer = 0 To grdStatusList.Rows.Count - 1
If DirectCast(grdStatusList.Rows(i).FindControl("grdChkStatus"), CheckBox).Checked Then
cfmLstParam = Nothing
cfmLstParam = New CfmListParam
CfmLstParam = DirectCast(Session("ConfirmStatus"), CfmListParam)
CfmLstParam.ER1No = DirectCast(grdStatusList.Rows(i).FindControl("grdLblER1No"), Label).Text
CfmLstParam.ER2No = DirectCast(grdStatusList.Rows(i).FindControl("grdLblER2No"), Label).Text
CfmLstParam.StatusFlg = DirectCast(grdStatusList.Rows(i).FindControl("grdCbStatus"), DropDownList).SelectedValue
CfmLstParam.Eng3Flg = DirectCast(grdStatusList.Rows(i).FindControl("grdLblEng3Flg"), Label).Text
CfmLstParam.EngCode = DirectCast(grdStatusList.Rows(i).FindControl("grdLblEngCode"), Label).Text
CfmLstParam.RfmPsnlNo = DirectCast(grdStatusList.Rows(i).FindControl("grdLnkRfmPsnlNo"), LinkButton).Text
CfmLstParam.PMNo = DirectCast(grdStatusList.Rows(i).FindControl("grdLblPMNo"), Label).Text
Mapper.Instance().Update("ConfirmStatus_SQL-UPDATE-CONFIRM-ERM-1", CfmLstParam)
If DirectCast(grdStatusList.Rows(i).FindControl("grdHdnPMUpdateFlg"), HiddenField).Value = "1" Then
Mapper.Instance().Update("ConfirmStatus_SQL-UPDATE-CONFIRM-PMG-1", CfmLstParam)
End If
updateNum += 1
End If
Next
其他不相关的代码均省略现在我的困惑是
当我执行了保存操作后
session中的ConfirmStatus内容同时发生了变化
这是为什么呢?
当前画面从session中取得上个画面传的一个类CfmListParam的值
执行了sql检索后进行榜定
之后gridview中可以对内容进行修改
之后点保存按钮后将各条被选中的数据进行更新部分代码如下:
Page_Load中 cfmLstParam = Nothing
cfmLstParam = New CfmListParam
cfmLstParam = DirectCast(Session("ConfirmStatus"), CfmListParam)
ilstCfmLst = Mapper.Instance().QueryForList("ConfirmStatus_SQL-CONFIRM-1", cfmLstParam)
Me.grdStatusList.DataSource = ilstCfmLst
Me.grdStatusList.DataBind() btnSave_Click中For i As Integer = 0 To grdStatusList.Rows.Count - 1
If DirectCast(grdStatusList.Rows(i).FindControl("grdChkStatus"), CheckBox).Checked Then
cfmLstParam = Nothing
cfmLstParam = New CfmListParam
CfmLstParam = DirectCast(Session("ConfirmStatus"), CfmListParam)
CfmLstParam.ER1No = DirectCast(grdStatusList.Rows(i).FindControl("grdLblER1No"), Label).Text
CfmLstParam.ER2No = DirectCast(grdStatusList.Rows(i).FindControl("grdLblER2No"), Label).Text
CfmLstParam.StatusFlg = DirectCast(grdStatusList.Rows(i).FindControl("grdCbStatus"), DropDownList).SelectedValue
CfmLstParam.Eng3Flg = DirectCast(grdStatusList.Rows(i).FindControl("grdLblEng3Flg"), Label).Text
CfmLstParam.EngCode = DirectCast(grdStatusList.Rows(i).FindControl("grdLblEngCode"), Label).Text
CfmLstParam.RfmPsnlNo = DirectCast(grdStatusList.Rows(i).FindControl("grdLnkRfmPsnlNo"), LinkButton).Text
CfmLstParam.PMNo = DirectCast(grdStatusList.Rows(i).FindControl("grdLblPMNo"), Label).Text
Mapper.Instance().Update("ConfirmStatus_SQL-UPDATE-CONFIRM-ERM-1", CfmLstParam)
If DirectCast(grdStatusList.Rows(i).FindControl("grdHdnPMUpdateFlg"), HiddenField).Value = "1" Then
Mapper.Instance().Update("ConfirmStatus_SQL-UPDATE-CONFIRM-PMG-1", CfmLstParam)
End If
updateNum += 1
End If
Next
其他不相关的代码均省略现在我的困惑是
当我执行了保存操作后
session中的ConfirmStatus内容同时发生了变化
这是为什么呢?
当这个变量发生变化的时候. session会跟着变化, 和一般的引用类型赋值一样.
而 cfmLstParam = DirectCast(Session("ConfirmStatus"), CfmListParam)
session中的ConfirmStatus 是等于cfmLstParam 这个集合的,所内容同时发生了变化。
说白了,就是刷新之后重新绑定的时候,你有重新给session中的ConfirmStatus赋值了.
请问还有什么更好的建议吗?
还是说不使用session而使用request方法?
只是pm要求用session
然后就改了要做什么的话
其实就是无非上个画面的检索条件保持住
当本画面有更新并且保存后
页面重新根据上一个页面的检索key来提交一次实现同步更新我也有想过
不过这个是个内部系统
所以可能实际传递和保存内容不会太多