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
我的做法是把数据全部保存到一个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
从你写的来看
每次只能保存上一个页面的状态
而你所需要的是上两次的状态
所以用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
绑定前:
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