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

[SOLUCIONADO] Recoger multiples filas mediante checkbox

Estas en el tema de Recoger multiples filas mediante checkbox en el foro de ASPX (.net) en Foros del Web. Buenos días, Tengo un problema a la hora de recoger y validar los datos seleccionados de un gridview mediante checkboxes. Lo que quiero hacer es ...
  #1 (permalink)  
Antiguo 24/07/2013, 02:37
 
Fecha de Ingreso: octubre-2012
Ubicación: Pozuelo de Alarcón
Mensajes: 67
Antigüedad: 11 años, 6 meses
Puntos: 1
Recoger multiples filas mediante checkbox

Buenos días,

Tengo un problema a la hora de recoger y validar los datos seleccionados de un gridview mediante checkboxes.

Lo que quiero hacer es seleccionar varias filas de un gridview y luego guardar esos valores.

El codigo es el siguiente:

Código ASP:
Ver original
  1. <asp:GridView ID="GridView1" SkinID="GV" runat="server" AutoGenerateColumns="False"
  2.         DataKeyNames="id_part" DataSourceID="ODS"  
  3.         style="margin-top: 0px" Visible="True" AllowPaging="True" >      
  4.         <Columns>
  5.         <asp:TemplateField HeaderText="Select" SortExpression="Selected">
  6.           <ItemTemplate>
  7.             <asp:CheckBox ID="chkID" runat="server" />
  8.           </ItemTemplate>
  9.         </asp:TemplateField>
  10.           <asp:BoundField DataField="pn" HeaderText="Part Number" InsertVisible="False" ReadOnly="True" SortExpression="pn" />
  11.           <asp:BoundField DataField="rma" HeaderText="RMA" SortExpression="rma" />
  12.           <asp:BoundField DataField="status" HeaderText="Status" SortExpression="status"/>
  13.           <asp:BoundField DataField="qty" HeaderText="Qty" SortExpression="qty"/>
  14.           <asp:BoundField DataField="dir_cliente" HeaderText="Address Customer" InsertVisible="False" ReadOnly="True" SortExpression="dir_cliente" />
  15.           <asp:BoundField DataField="loaded_type" HeaderText="Loaded Type" SortExpression="loaded_type"/>
  16.         </Columns>
  17.     </asp:GridView>

el codigo donde compruebo el checked es el siguiente:

Código c#:
Ver original
  1. protected void Button2_Click(object sender, EventArgs e)
  2.     {
  3.         for (int i = 0; i < GridView1.Rows.Count; i++)
  4.         {
  5.             GridViewRow row = GridView1.Rows[i];
  6.             bool isChecked = ((CheckBox)row.FindControl("chkID")).Checked;
  7.  
  8.             if (isChecked)
  9.             {
  10.                 string id = GridView1.Rows[i].Cells[2].Text;
  11.                 //int id = (int)GridView1.DataKeys[i].Value;
  12.                 lbl_id_checkbox.Text = "Id = " + id + ";";
  13.                 lbl_id_checkbox.Visible = true;
  14.             }
  15.         }
  16.  
  17.     }

En este ultimo código nunca me entra por el isChecked. Siempre esta a false.

Gracias de antemano.

Un saludo
  #2 (permalink)  
Antiguo 26/07/2013, 03:09
 
Fecha de Ingreso: octubre-2012
Ubicación: Pozuelo de Alarcón
Mensajes: 67
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Recoger multiples filas mediante checkbox

Formulo mejor la pregunta. ¿Por que no cambia el estado del checkbox a true cuando pincho sobre el?¿Tengo el botón mal puesto?¿Alguien sabe por que puede ocurrir?He leído que es por el autopostback pero al ponerlo a true tampoco me deja seleccionado el checkbox y siempre esta a false.

Gracias.
Un saludo.
  #3 (permalink)  
Antiguo 01/08/2013, 10:07
Avatar de murdoc92  
Fecha de Ingreso: mayo-2012
Ubicación: Santiago
Mensajes: 58
Antigüedad: 11 años, 11 meses
Puntos: 3
Respuesta: Recoger multiples filas mediante checkbox

Que pusiste en autopostback true?, con dejar el checkbox con autopostback true deberia funcionar. Eso es porque tienes que enviar al servidor los valores de los checkbox. Te aconsejo que uses los controles de devexpress (http://demos.devexpress.com/ASPxGridViewDemos/Selection/Selection.aspx) o telerik. Son complicados al principio pero te olvidas del viewstate y autopostback.
  #4 (permalink)  
Antiguo 05/08/2013, 03:03
 
Fecha de Ingreso: octubre-2012
Ubicación: Pozuelo de Alarcón
Mensajes: 67
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Recoger multiples filas mediante checkbox

Buenas,

El autopostback lo tengo a false, pero también lo he puesto en true y sigue pasando lo mismo.
Lo curioso es que copie el código de ese checkbox en otro gridview y me funciona bien.

Voy a intentar probar las dos formas que me has comentado y escribo para ver como ha ido.

Muchas gracias por su respuesta.
Saludos
  #5 (permalink)  
Antiguo 05/08/2013, 04:47
 
Fecha de Ingreso: octubre-2012
Ubicación: Pozuelo de Alarcón
Mensajes: 67
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Recoger multiples filas mediante checkbox

Buenas de nuevo,

He mirado lo que mas has comentado y todo viene bien explicado para el visual studio.
En mi caso no utilizo esa herramienta y lo hago todo a mano por lo que me gustaría hacerlo como lo tengo hasta ahora.

Lo que me extraña es que tengo otro gridview con otro checkbox en la misma pagina y en este caso me funciona correctamente. El segundo gridview esta copiado y pegado del anterior pero en este caso no cambia el checked a true cuando lo seleccionas.

También he mirado con el autopostback a true y el OnCheckedChanged a una función que me cambie el checked a true de la fila seleccionada. Pero esto ultimo ha sido imposible ya que desconozco como cambiar el estado del checked de esa fila en concreto(la llamada a esa fila del gridview).

A alguien se le ocurre como puedo hacer para que el checked de la fila cambie?

Muchas gracias por su ayuda.

Les dejo el nuevo código de la pagina.

Código ASP:
Ver original
  1. <asp:Panel ID="selectpart" runat="server">
  2.   <asp:GridView ID="GridView1" SkinID="GV" runat="server" AutoGenerateColumns="False"
  3.         DataKeyNames="id_part" DataSourceID="ODS"  
  4.         style="margin-top: 0px" Visible="True" AllowPaging="True" >      
  5.         <Columns>
  6.         <asp:TemplateField HeaderText="Select" SortExpression="Selected2">
  7.           <ItemTemplate>
  8.             <asp:CheckBox ID="checkbox2" runat="server"/>
  9.           </ItemTemplate>
  10.         </asp:TemplateField>
  11.         <asp:BoundField DataField="OPTcase" HeaderText="OPTcase" InsertVisible="False" ReadOnly="True" SortExpression="OPTcase" />
  12.           <asp:BoundField DataField="pn" HeaderText="Part Number" InsertVisible="False" ReadOnly="True" SortExpression="pn" />
  13.           <asp:BoundField DataField="rma" HeaderText="RMA" SortExpression="rma" />
  14.           <asp:TemplateField HeaderText="Status" SortExpression="status">
  15.                         <EditItemTemplate>
  16.                             <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("status") %>'></asp:TextBox>
  17.                         </EditItemTemplate>
  18.                         <ItemTemplate>
  19.                             <asp:DropDownList ID="DDL_status" runat="server" style="margin-bottom: 0px"
  20.                             Width="128px">
  21.                             <asp:ListItem Value=""> </asp:ListItem>
  22.                             <asp:ListItem Value="DOA">DOA</asp:ListItem>
  23.                             <asp:ListItem Value="NEW">NEW</asp:ListItem>
  24.                             <asp:ListItem Value="USED">USED</asp:ListItem>
  25.                             <asp:ListItem Value="WS/WPIB">WS/WPIB</asp:ListItem>
  26.                         </asp:DropDownList>
  27.                         </ItemTemplate>
  28.                     </asp:TemplateField>
  29.           <asp:BoundField DataField="qty" HeaderText="Qty" SortExpression="qty"/>
  30.           <asp:BoundField DataField="dir_cliente" HeaderText="Address Customer" InsertVisible="False" ReadOnly="True" SortExpression="dir_cliente" />
  31.           <asp:BoundField DataField="loaded_type" HeaderText="Loaded Type" SortExpression="loaded_type"/>
  32.         </Columns>
  33.     </asp:GridView>
  34.     <asp:Button ID="Button3" runat="server" onclick="Button3_Click" CssClass="normalButton"
  35.                             Text="Select and confirm" />
  36.     </asp:Panel>

Parte del Servidor:

Código C#:
Ver original
  1. protected void Button3_Click(object sender, EventArgs e)
  2.     {
  3.         //create packing list and update part(piki and status)
  4.         PLsBLL plinsertar = new PLsBLL();
  5.         PLTO pl = new PLTO();
  6.  
  7.         pl.id_trans = Convert.ToInt32(Session["id_trans"]);
  8.         pl.date_generated = DateTime.Now;
  9.         pl.status = "Open";
  10.         pl.user = Convert.ToInt32(Session["id_user"]);
  11.         plinsertar.insertPl(pl);
  12.  
  13.         PLsBLL pl2 = new PLsBLL();
  14.  
  15.         int id_pl_aux = Convert.ToInt32(pl2.getmaxpl().Rows[0]["id_pl2"]);
  16.         Session["id_pl"] = id_pl_aux;
  17.         lbl_no_address2.Text = "GridView1 rows = " + GridView1.Rows.Count;
  18.         lbl_no_address2.Visible = true;
  19.        
  20.         for (int i = 0; i < GridView1.Rows.Count; i++)
  21.         {
  22.             GridViewRow row = GridView1.Rows[i];
  23.             bool isChecked2 = ((CheckBox)row.FindControl("checkbox2")).Checked;
  24.             CheckBox check = ((CheckBox)row.FindControl("checkbox2"));
  25.             if (check.Checked == true)
  26.             {
  27.                 //Session["parts"][i] = GridView1.Rows[i].Cells[2].Text;
  28.                 int id = (int)GridView1.DataKeys[i].Value;
  29.                 lbl_id_pl.Text = "Entra en actualizar piki y status para el id: " + id;
  30.                 lbl_id_pl.Visible = true;
  31.  
  32.                 VOLATILBLL volatil = new VOLATILBLL();
  33.  
  34.                 volatil.getupdatepiki(1, id);
  35.                 volatil.getupdatestatus(DDL_status.Text, id);
  36.             }
  37.             else
  38.             {
  39.                 int id2 = (int)GridView1.DataKeys[i].Value;
  40.                 lbl_no_address.Text = "Entra en actualizar piki a 0 para el id2: " + id2;
  41.                 lbl_no_address.Visible = true;
  42.  
  43.                 VOLATILBLL volatil2 = new VOLATILBLL();
  44.  
  45.                 volatil2.getupdatepiki(0, id2);
  46.             }
  47.         }
  48.         //Response.Redirect("resumenpl.aspx");
  49.  
  50.     }

Siento los labels ya que los utilizo para ver que todo va saliendo bien.
Un saludo y muchas gracias por su ayuda.
  #6 (permalink)  
Antiguo 07/08/2013, 03:04
 
Fecha de Ingreso: octubre-2012
Ubicación: Pozuelo de Alarcón
Mensajes: 67
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Recoger multiples filas mediante checkbox

Buenos días,

Por fin solucione el problema.
No había ningún problema en el código, simplemente que al marca un checkbox se recargaba la pagina por lo que nunca cambia el estado.

Poniendo if(ispostback) en el page_load todo se ha solucionado.
Gracias por vuestra ayuda.

Saludos

Etiquetas: asp, checkbox, filas, gridview, mediante, multiples, recoger, server
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 14:44.