Ver Mensaje Individual
  #9 (permalink)  
Antiguo 04/04/2008, 12:18
Avatar de Fann_Lavigne
Fann_Lavigne
 
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 20 años
Puntos: 12
Re: Gridview con checkbox.

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.
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]