Foros del Web » Programando para Internet » ASPX (.net) »

Gridview con checkbox.

Estas en el tema de Gridview con checkbox. en el foro de ASPX (.net) en Foros del Web. Saludos amigos, mi inquietud es esta, tengo un gridview lleno con los datos de una tabla usuario en sql 2005, pero no la lleno con ...
  #1 (permalink)  
Antiguo 02/04/2008, 16:14
 
Fecha de Ingreso: junio-2007
Mensajes: 253
Antigüedad: 16 años, 10 meses
Puntos: 0
Gridview con checkbox.

Saludos amigos, mi inquietud es esta, tengo un gridview lleno con los datos de una tabla usuario en sql 2005, pero no la lleno con codigo sino con un objectdatasource, no hay problema hasta ahi porque solo me interesaba seleccionar una fila , pero ahora quiero que este grid tenga una fila de checkbox porque me interesa escoger mas de un usuario al mismo tiempo para generar un reporte.

Como podria hacer eso mediante codigo c#?

Gracias por cualquier ayuda que me puedan proporcionar.
  #2 (permalink)  
Antiguo 03/04/2008, 04:10
Avatar de Javier Santamaria  
Fecha de Ingreso: julio-2007
Mensajes: 296
Antigüedad: 16 años, 9 meses
Puntos: 1
Re: Gridview con checkbox.

Hola, para eso tienes que meter un item template en el gridview y dentro del item template un checkbox. Esto te pondra un checkbox por cada fila. Luego cuando necesites saber cuantos estan seleccionados recorres el gridview buscando esos checkboxes y listo.

Saludos
  #3 (permalink)  
Antiguo 03/04/2008, 11:23
 
Fecha de Ingreso: junio-2007
Mensajes: 253
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Gridview con checkbox.

Gracias Javier ya habia hecho lo que me aconsejas tú, pero el problema esta en que al paginar el gridview lo items seleccionados de las anteriores se borran.

Además yo tengo el gridview paginado con letras y numeros, ese es otro problema veo los checkboxes pero al escoger se pierde si me cambio de letra y si pagino con los numeros.

Hay alguna forma de no perder esos datos?
  #4 (permalink)  
Antiguo 03/04/2008, 21:03
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Re: Gridview con checkbox.

Lo uniko ke se me okurre, es ke almacenes tus datos, es decir los de los chekboxes en un datatable, y kada vez ke das clic en algun index del paginado, wardar estos datos para kuando regreses se muestren de nuevo.
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #5 (permalink)  
Antiguo 04/04/2008, 08:30
 
Fecha de Ingreso: junio-2007
Mensajes: 253
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Gridview con checkbox.

Gracias por tu respuesra Fann, pero no entiendo bien a que te refieres, si fueras tan amable y tuvieras un ejemplo seria fabuloso.
Pero con todo voy a tratar de investigar tu respuesta. Gracias de nuevo.
  #6 (permalink)  
Antiguo 04/04/2008, 09:25
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Re: Gridview con checkbox.

Ok, si, de echo si tengo ejemplos pero no a la mano, es decir, tratare de facilitarte uno lo mas pronto posible, de todos modos te platiko la idea mas a detalle.

Generas un dataTable con N columnas mas la columna de tus checkBoxes, las filas de tu DataTable seran actualizadas con la Info (true o false) de tus checkboxes dependiendo su seleccion, ahora, bien, este update lo programaras en la mismo evento donde programaste lo del paginado, rekorriendo kada fila del Grid, obtienedo los valores de cada Check, asi ke, se almacenaran los datos de la pagina donde etses, y kambaria de pagina sin perder los datos, en kuanto tenga un tiempo te programo un ejemplo sencillo, pero kompleto kon la idea. saludos
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]
  #7 (permalink)  
Antiguo 04/04/2008, 10:18
 
Fecha de Ingreso: junio-2007
Mensajes: 253
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Gridview con checkbox.

Te agradeceria muchisimo el ejemplo, con ese me salvas la vida
  #8 (permalink)  
Antiguo 04/04/2008, 12:09
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: Gridview con checkbox.

ViewSate entre paginacion, variables de session o cualquier otro metodo q te salve la informacion de los checkboxes seleccionados es una de las opciones
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #9 (permalink)  
Antiguo 04/04/2008, 12:18
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
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]
  #10 (permalink)  
Antiguo 04/04/2008, 13:37
 
Fecha de Ingreso: junio-2007
Mensajes: 253
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Gridview con checkbox.

He traducido el codigo de Fann a c# pero me da errores en ciertas partes del codigo, lo poteo por si alguien me puede ayudar a solucionarlos:

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.GridView1.DataSource = MisDatos();
this.GridView1.DataBind();

}
}

ICollection MisDatos()
{
DataTable dt_DataTable;
DataRow dr_DataRow;
if ((Session["MisDatos"] == null))
{
dt_DataTable = new DataTable();
for (int int_i = 1; (int_i <= 100); int_i++)
{
dr_DataRow = dt_DataTable.NewRow();
dr_DataRow[0] = int_i;
dr_DataRow[1] = true;
dt_DataTable.Rows.Add(dr_DataRow);
}
MisDatos() = new DataView(dt_DataTable);
Session["MisDatos"] = dt_DataTable;
}
else
{
dt_DataTable = (DataTable)Session["MisDatos"];
foreach (GridViewRow itm_Item in this.GridView1.Rows)
{
CheckBox chk_Box = itm_Item.FindControl("chbSelect");
dr_DataRow = dt_DataTable.Rows[itm_Item.DataItemIndex];
dr_DataRow[1] = chk_Box.Checked;
dt_DataTable.AcceptChanges();
}
MisDatos() = new DataView(dt_DataTable);
Session["MisDatos"] = dt_DataTable;
}
}

Los errores son los siguientes:

Error 1 Cannot assign to 'MisDatos' because it is a 'method group' c:\pruebagrid\Default2.aspx.cs 41 13

Error 2 Cannot implicitly convert type 'System.Web.UI.Control' to 'System.Web.UI.WebControls.CheckBox'. An explicit conversion exists (are you missing a cast?) c:\pruebagrid\Default2.aspx.cs 51 36

Última edición por Rodro; 04/04/2008 a las 14:01
  #11 (permalink)  
Antiguo 04/04/2008, 14:11
Avatar de Fann_Lavigne  
Fecha de Ingreso: diciembre-2004
Mensajes: 622
Antigüedad: 19 años, 4 meses
Puntos: 12
Re: Gridview con checkbox.

Puedes kitarle los parentesis:

de esto:

MisDatos() = new DataView(dt_DataTable);

A esto:

MisDatos = new DataView(dt_DataTable);

Asi deberia de jalar.

O en dado casu usar la palabra return seguida del dato que quieres regresar.
__________________
"Entre Mas Brillante Es Una Mente, Tiene Que Luchar Contra Demonios Internos Mas Poderosos"
[email protected]

Última edición por Fann_Lavigne; 04/04/2008 a las 14:11 Razón: Olvide comentar return.
  #12 (permalink)  
Antiguo 16/01/2009, 14:50
 
Fecha de Ingreso: enero-2009
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Re: Gridview con checkbox.

CheckBox chk_Box = itm_Item.FindControl("chbSelect");

Hola a todos soy nuevo en el foro, espero estar en contacto con todos Uds.
hola intenta hacer esto:

CheckBox chk_Box = (CheckBox)itm_Item.FindControl("chbSelect");
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:01.