关于在datagrid翻页时状态保存的问题?100分求救!!!

xlt771111 2003-08-19 09:32:46
我在datagrid有一列选择控件(checkbox),此datagrid是分页的,请教各位大虾,如何在翻页时保存checkbox的状态?现在一翻页再返回原来的页时,所作的更改都没了???
...全文
68 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdangdang 2003-08-20
  • 打赏
  • 举报
回复
View State只能用于同一个页面刷新的情况
如果有翻页这种状况的话
必须使用DataTable之类的存储空间
单纯的ViewState是不够的
如果一定要用ViewState那么可以
在ViewState里面放一个HashTable

Sub Get_Checkbox_Info()
Dim itm As DataGridItem
Dim i As Integer
i = 0
Dim s(dgrid_clients.Items.Count() - 1) As Boolean

For Each itm In dgrid_clients.Items
Dim chk_select As CheckBox = itm.FindControl("chk_select")
s(i) = chk_select.Checked
i = i + 1
Next
viewstate("arr_select") = s
if viewstate("objHash") is nothing then
viewstate("objHash")= new hashtable()
else
dim objHash as hashtable=viewstate("objHash")
endif
objHash.item(DataGrid.currentPageIndex)= s
End Sub


That will also be OK
lufly2000 2003-08-20
  • 打赏
  • 举报
回复
gz
xlt771111 2003-08-20
  • 打赏
  • 举报
回复
又没有好一点的解决方法
acewang 2003-08-19
  • 打赏
  • 举报
回复
在翻页事件里查看选中状态,用cookie session,viewstate保存都可以
不过每次翻页都还得绑定好象挺难受的
KevinCao 2003-08-19
  • 打赏
  • 举报
回复
我的做法是把数据全部保存到一个DataSet里面
dim datagridrow as datagriditem
dim dsA as new dataset
dsA.tables.add()
For each datagridrow in dgA
dim xloop as integer =0
dsA.tables(0).rows(xloop)(0) = iif(ctype(datagridrow.cells(列的序号).controls(1),checkbox),"Y","N")
xloop +=1
Next

这样的话,把checkbox里面的状态保存为"Y","N",在呈现的时候,你就需要在datagrid的绑定事件里写把"Y","N"转换为checkbox是否选中
aquariusBoy 2003-08-19
  • 打赏
  • 举报
回复
可以设一个隐藏的控件,每次页面load的时候就读取一次
xlt771111 2003-08-19
  • 打赏
  • 举报
回复
怎么用啊,太麻烦了吧
Soking 2003-08-19
  • 打赏
  • 举报
回复
你可以用cookie或者是senssion啊
xlt771111 2003-08-19
  • 打赏
  • 举报
回复
up
DoHope 2003-08-19
  • 打赏
  • 举报
回复
学习。
wjohenw 2003-08-19
  • 打赏
  • 举报
回复
存:
ViewState["CheckBox"] = true;


bool state;
state = ViewState["CheckBox"];
xdangdang 2003-08-19
  • 打赏
  • 举报
回复
try过了吗?
lwgj 2003-08-19
  • 打赏
  • 举报
回复
由各笨办法,加个隐藏的textbox每次翻页时保存checkbox的值,也就是当字符串联起来,用是在截
xlt771111 2003-08-19
  • 打赏
  • 举报
回复
up
xdangdang 2003-08-19
  • 打赏
  • 举报
回复
从你写的来看
每次只能保存上一个页面的状态
而你所需要的是上两次的状态
所以用ViewState肯定是不可以的
我不知道你用什么做的翻页
我比较习惯用的方式是
getTable()
dim dv as dataview=DataTable.default
datagrid.datasource=dv
datagrid.currentPage=intIndex
datagrid.databind()
在这样的一种方式下面
翻页不需要返回数据库
因此只要保存的DataTable在你的Session里面
那么就可以保存任意多的页面状态
Private Sub dgPageIndexChanged(ByVal source As Object, _
ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) _
Handles Datagrid.PageIndexChanged

For intInd=0 to Datagrid.Items.count-1
Dim chk_select As CheckBox =ctype( datagrid.item(intInd).FindControl("chk_select"),checkBox)
dv(datagrid.currentpageindex*datagrid.pagesize+intInd).item(i)=chk_select.selected
Next
DataGird.DataSource=dv
DataGrid.currentPageIndex=.....
DataGrid.DataBind()
End Sub

xlt771111 2003-08-19
  • 打赏
  • 举报
回复
upupup!!!!!!!!!!!!!
xlt771111 2003-08-19
  • 打赏
  • 举报
回复
xdangdang(当当):怎么保存,给个例子啊
xlt771111 2003-08-19
  • 打赏
  • 举报
回复
我是这样写的,但是发现在遍历datagrid时,只有当前页被遍历到了,为什么啊???
这样的话,我取数据都很不好取啊???

绑定前:
Sub Get_Checkbox_Info()
Dim itm As DataGridItem
Dim i As Integer
i = 0
Dim s(dgrid_clients.Items.Count() - 1) As Boolean

For Each itm In dgrid_clients.Items
Dim chk_select As CheckBox = itm.FindControl("chk_select")
s(i) = chk_select.Checked
i = i + 1
Next
viewstate("arr_select") = s
End Sub

绑定后(从数据库绑定的)

Sub bind_checkbox()
Dim itm As DataGridItem
Dim i As Integer
i = 0
Dim s() As Boolean
s = viewstate("arr_select")
For Each itm In dgrid_clients.Items
Dim chk_select As CheckBox = itm.FindControl("chk_select")
chk_select.Checked = s(i)
i = i + 1
Next
End Sub
xdangdang 2003-08-19
  • 打赏
  • 举报
回复
如果DataGrid有DataSource的话
可以每次翻页前面把当前的
DataGrid状态保存到DataSource里面
下次
翻页回来只要DataBind就可以了
xlt771111 2003-08-19
  • 打赏
  • 举报
回复
up

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧