Encontré un caso truculento el dí­a de hoy. Tengo un ListView que tiene un ItemTemplate dentro del cual estoy poniendo controles de tipo CheckBox. El usuario puede elegir varios de éstos, y cuando se oprime un botón necesito validar la cantidad de casillas que seleccionó.

Aquí­ está mi ListView y el botón.

  1. <asp:ListView ID="ListadoPlanes" runat="server"
  2.        ItemPlaceholderID="AquiVanItems" DataSourceID="ODSPlanes">
  3.     <LayoutTemplate>
  4.   <table width="100%" border="0" cellspacing="0" cellpadding="3">
  5.     <tr>
  6.       <td class="TdDegra">Seleccione hasta 4 opciones</td>
  7.       <td class="TdDegra">Nombre</td>
  8.     </tr>
  9.     <asp:PlaceHolder ID="AquiVanItems" runat="server"></asp:PlaceHolder>
  10.    </table>                            
  11.     </LayoutTemplate>
  12.     <ItemTemplate>
  13.     <tr>
  14.       <td>
  15.         <asp:CheckBox ID="Plan" runat="server" />
  16.         <asp:HiddenField ID="PlanId" runat="server" Value='<%#Eval("idplan")%>' />
  17.       </td>
  18.       <td><%#Eval("Nombre")%></td>
  19.  </tr>
  20.     </ItemTemplate>
  21. </asp:ListView>
  22. <asp:Button ID="Button1" runat="server" Text="Button" />

En la lí­nea 15 estoy creando el CheckBox con el ID igual a “Plan”. Necesito guardar, en cada renglón, el ID de mi tabla, que se llama “idplan”, por lo que en la lí­nea 16 creo un HiddenField y establezco su valor con mi id. Ahora en cada renglón tendré una casilla de verificación y un campo con el id de mi tabla.

Ahora bien, para iterar en los renglones del ListView e ir checando cada CheckBox, usa el siguiente código:

  1. Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.  
  3.     Dim CuentaCtrl As Int16 = 0
  4.     Dim i As Integer
  5.     Dim ElCheckBox As CheckBox
  6.     Dim ElHidden As HiddenField
  7.     For i = 0 To ListadoPlanes.Items.Count - 1
  8.         ElCheckBox = CType(ListadoPlanes.Items(i).FindControl("Plan"), CheckBox)
  9.         ElHidden = CType(ListadoPlanes.Items(i).FindControl("PlanId"), HiddenField)
  10.         If ElCheckBox.Checked = True Then
  11.             CuentaCtrl = CuentaCtrl + 1
  12.             'Si necesitas hacer algo con tu id en este ciclo,
  13.             'accedelo usando ElHidden.Value
  14.         End If
  15.     Next
  16.  
  17.     If CuentaCtrl > 2 Or CuentaCtrl = 0 Then
  18.         'Hacer algo
  19.  
  20.     Else
  21.         'Hacer algo
  22.     End If
  23.  
  24. End Sub

En la iteración estoy revisando las opciones seleccionadas y al final solamente tomo una decisión dependiendo de cuántas casillas están marcadas.

¡Suerte!

Un comentario sobre “Cómo encontrar checkboxes dentro de un ListView con FindControl

  1. Saludos amigo, excelente aporte…
    Tendrás algún ejemplo donde tenga un botón dentro de mis iteraciones donde ejecute una serie de acciones sobre el ítem al que pertenece el botón???

    Gracias de antemano…
    @ingMig

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


nueve − 3 =