比较棘手的问题
翻页以后check过的不能保存状态

解决方案 »

  1.   

    checkbox选中行时,将需要的信息,如ID保存到一个Session数组中,就不会丢失的
      

  2.   

    用session保存:
    Private Sub DataGrid1_PageIndexChanged(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridPageChangedEventArgs) Handles DataGrid1.PageIndexChanged
            Dim bb As Integer
            Dim cnn As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\UserLog.mdb")
            Dim da As New OleDb.OleDbDataAdapter("select * from mm", cnn)        da.Fill(dst)
           
            bb = dst.Tables(0).Rows.Count   'DataGrid中的记录总数;
            Dim check As Boolean()
            check = Me.Session("g_checks")  'check()是记录checkbox状态的数组,用session保存。
            If (DataGrid1.CurrentPageIndex < bb / DataGrid1.PageSize) Then
                Dim j As Integer
                For j = 0 To DataGrid1.PageSize - 1
                    Dim Cx As CheckBox = DataGrid1.Items(j).Cells(0).FindControl("CheckBox1")
                    If Not Cx Is Nothing Then
                        If Cx.Checked = True Then
                            check(DataGrid1.CurrentPageIndex * DataGrid1.PageSize + j) = True
                        Else
                            check(DataGrid1.CurrentPageIndex * DataGrid1.PageSize + j) = False
                        End If
                    End If
                Next
            Else
                    Dim i As Integer
                For i = 0 To bb Mod DataGrid1.PageSize
                    Dim Cx1 As CheckBox = DataGrid1.Items(i).Cells(0).FindControl("CheckBox1")
                    If (Cx1.Checked) Then
                        check(DataGrid1.CurrentPageIndex * DataGrid1.PageSize + i) = True
                    Else
                        check(DataGrid1.CurrentPageIndex * DataGrid1.PageSize + i) = False
                    End If
                Next
            End If
            DataGrid1.CurrentPageIndex = e.NewPageIndex
            Dim ds As New DataSet()
            da.Fill(ds, "a")
            DataGrid1.DataSource = ds
            DataGrid1.DataBind()
            If (DataGrid1.CurrentPageIndex < bb / DataGrid1.PageSize) Then
                Dim i As Integer
                For i = 0 To DataGrid1.PageSize - 1
                    Dim Cx2 As CheckBox = DataGrid1.Items(i).Cells(0).FindControl("CheckBox1")
                    If check(DataGrid1.CurrentPageIndex * DataGrid1.PageSize + i) = True Then
                        Cx2.Checked = True
                    Else
                        Cx2.Checked = False
                    End If
                Next
            Else
                Dim i As Integer
                For i = 0 To bb Mod DataGrid1.PageSize - 1
                    Dim Cx3 As CheckBox = DataGrid1.Items(0).Cells(0).FindControl("CheckBox1")
                    If (check(DataGrid1.CurrentPageIndex * DataGrid1.PageSize + i) = True) Then
                        Cx3.Checked = True
                    Else
                        Cx3.Checked = False
                    End If
                Next        End If
        End Sub
      

  3.   

    Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
            ' 在会话启动时激发
            Dim checks As Boolean() = New Boolean(10000) {}
            Dim i As Integer
            For i = 0 To 10000
                checks(i) = False
            Next

            Session.Add("g_checks", checks)
        End Sub