Posteo la solucion en ejmplo, en vb, no te sera dificil hacerlo en C#, lo ke pasa es ke no manejo C# , sorry.
Ingredientes:
1 GridView Llamado gv_Main, con paginado.
1 BounField con DataField = "Contador"
1 Template Column con CheckBox llamado gv_chk_Box
En las propiedades HTML del checkbox del template, ira lo siguiente:
Código:
<ItemTemplate>
<asp:CheckBox ID="gv_chk_Box" runat="server" Checked='<%# DataBinder.Eval(Container.DataItem, "CheckBoxValue") %>' />
</ItemTemplate>
Donde CheckBoxValue es una columna en nuestro DataTable.
Ahora lo siguiente:
Page Load:
Código:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack = False Then
With Me.gv_Main
.DataSource = MisDatos()
.DataBind()
End With
End If
End Sub
Funcion MisDatos: (Aki el Truco)
Código:
Function MisDatos() As ICollection
'Funcion que nos creara el DataTable, o lo actualiza
Dim dt_DataTable As DataTable
Dim dr_DataRow As DataRow
If Session("MisDatos") Is Nothing Then
'Generamoas el dataTable kon Datos Nuevos
dt_DataTable = New DataTable
With dt_DataTable.Columns
.Add("Contador")
.Add("CheckBoxValue")
End With
For int_i As Integer = 1 To 100
dr_DataRow = dt_DataTable.NewRow
dr_DataRow(0) = int_i
dr_DataRow(1) = True 'Puede ser false, komo los gustes iniciar
dt_DataTable.Rows.Add(dr_DataRow)
Next
MisDatos = New DataView(dt_DataTable)
Session("MisDatos") = dt_DataTable
Else
'Obtenemos el DataTable existente en la var de sesion
dt_DataTable = Session("MisDatos")
For Each itm_Item As GridViewRow In Me.gv_Main.Rows
'Recorremos el grid, apuntando al CheckBox para Actualizar la kolumna del chek
Dim chk_Box As CheckBox = itm_Item.FindControl("gv_chk_Box")
dr_DataRow = dt_DataTable.Rows(itm_Item.DataItemIndex) 'Le pasamos el index de fila, ke sera el mismo ke el index con el ke rekorremos las filas
dr_DataRow(1) = chk_Box.Checked 'aki aktualizamos el dato del checkbox
dt_DataTable.AcceptChanges() 'aceptamos kambios
Next
MisDatos = New DataView(dt_DataTable) 'le regresanos la info actualizada a la funcion
Session("MisDatos") = dt_DataTable 'actualizamos la variable de sesion
End If
End Function
Sub gv_Main_PageIndexChanging: donde se hace el paginado.
Código:
Protected Sub gv_Main_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gv_Main.PageIndexChanging
Me.gv_Main.PageIndex = e.NewPageIndex
With Me.gv_Main
.DataSource = MisDatos()
.DataBind()
End With
End Sub
Conclusion: basicamente, si existe la variable de sesion con el DataTable lo que se hace es actualizarlo con la info nueva del Grid, que posiblemenete haya Cambiado al cambiar de pagina. Espero no se me haya ido algun detalle, sino, preguntarme y lo corrigo, saludos. Por ahi y si no es mucho pedir, agreguenme Karma, saludos.