none
Establecer value de un radiobutton en un repeater RRS feed

  • Pregunta

  • Tengo un formulario donde se llena una encuesta y para las respuestas utilizo radiobuttons ... pero quisiera saber si se puede establecer un valor desde bd a los radiobuttons...o seria mucho mejor poner un RadioButtonList para almacenar en mi lista los 4 valores?... Les dejo mi codigo de avance

    <asp:Repeater ID="rpt" runat="server">
          <HeaderTemplate>
            <table align="center" cellspacing="0">
            <tr align="center" class="alternativaf">
            <td width="30">N°</td>
            <td width="500">Descripcion</td>
          <td width="80">Insuficiente</td>
            <td width="80">Regular</td>
            <td width="80">Bueno</td>
             <td width="80">Destacado</td>
            </tr>
          </HeaderTemplate>
          <ItemTemplate><tr >
          <td> <asp:Label ID="lblindex" runat="server" Text ='<%#Eval("Seq")%>' Width="10px"></asp:Label></td>
            <asp:Label ID="lblid1" runat="server" Text ='<%#Eval("codigof")%>' Width="500" Visible="False"></asp:Label>
           <td> <asp:Label ID="descrip" runat="server" Text ='<%#Eval("descrip")%>' Width="500"></asp:Label> </td>
                            <td align="center"> <asp:RadioButton ID="rb11" runat="server" GroupName="1" /> </td>
                  <td align="center"> <asp:RadioButton ID="rb22" runat="server" GroupName="1" /> </td>
                       <td align="center"> <asp:RadioButton ID="rb33" runat="server" GroupName="1" /> </td>
                              <td align="center"> <asp:RadioButton ID="rb44" runat="server" GroupName="1" /> </td>                 
             </tr>
             </ItemTemplate>
                  <FooterTemplate>
    </table></FooterTemplate>
    </asp:Repeater>

       Protected Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
            For Each item As RepeaterItem In rpt.Items
    
                Dim Qbox As TextBox = TryCast(item.FindControl("lblid1"), TextBox)
                Dim Question As String = Qbox.Text
    
                     If Not String.IsNullOrEmpty(Question) Then
                    Dim con As New SqlConnection(conString)
                    con.Open()
                    Dim cmd As New SqlCommand("insert into [OPP].[tblDetalleEncuGeneral] values(@idPractica,@idPregu,idRespu)", con)
                    cmd.Parameters.AddWithValue("@idPractica", idPracti)
                    cmd.Parameters.AddWithValue("@idPregu", Question)
                    cmd.Parameters.AddWithValue("@idRespu",aqui va el valor delradioboton)
             
    
                    cmd.ExecuteNonQuery()
    
                    con.Close()
    
                End If
            Next
        End Sub


    • Editado fredsale jueves, 19 de marzo de 2015 15:15
    jueves, 19 de marzo de 2015 15:15

Respuestas

  • hola

    aconsejaria que dentro del template del repeates definas un RadioButtonList (puedes indicarle que muestre los opcion en horizontal estableciendo la direccion) de esta forma es mas simple de ubicar el control y asignarle el valor

    ASP.NET RadioButtonList in Repeater?

     Dim radioList As RadioButtonList = TryCast(item.FindControl("radio"), RadioButtonList)
    
     radioList.SelectedValue = ...


    o sea buscas el control dentro del item y le asignas el valor

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta fredsale jueves, 19 de marzo de 2015 20:41
    jueves, 19 de marzo de 2015 15:29
  • Hola  fredsale

    Como te comenta Leandro, recomendacion es utilizar RadioButtonList, solo ...lo malo... es el estilo para que quede justamente como estas necesitando. PEro bueno tendrias que evaluarlo
    El problema a parte del estilo CSS llamemosle "estetico" es para recuperar algun "valor" es mas facil en RadioButtonLIst que en simples Radiobutton, igual se puede pero no viene de "fabrica" ;)

    Te explico porque con tu ejemplo asi nos queda registro

    OPCION 1: Simple radiobutton... no tienen propiedad "Value", pero se puede agregar ;)

    En tu caso no tienes posibilidad de agrgar un valor, pero como en todo webcontrol puedes agregar "atributos" lo que quieras y luego recuperarlo (no tienes intellisense pero se recupera)
    En tu ejemplo asi:
    SI tienes 4 radiobutton con el mismo GroupName (y lo coloque dentro de un PlaceHolder para que sea mas facil recuperar el valor)

    <asp:PlaceHolder ID="placeHolderRadioButton" runat="server">
             <asp:RadioButton ID="rb1" runat="server" GroupName="grupo1" value="1"  />
            <asp:RadioButton ID="rb2" runat="server" GroupName="grupo1" value="2" />
            <asp:RadioButton ID="rb3" runat="server" GroupName="grupo1" value="3" />
            <asp:RadioButton ID="rb4" runat="server" GroupName="grupo1" value="4" />
    
        </asp:PlaceHolder>

    Y el codigo... bueno tenemos que ver del groupNAme de radioButton cual es el esta checkeado, ayudemosno con LINQ, la idea (se puede refinar)

      protected void btnAceptar_Click(object sender, EventArgs e)
            {
                var valorSeleccionado = RadioButtonObtenerValorPorGrupo("grupo1");
                litValorSeleccionado.Text = valorSeleccionado;
    
            }
    
            private string RadioButtonObtenerValorPorGrupo(string groupName)
            {
                var query = from r in placeHolderRadioButton.Controls
                                            .OfType<System.Web.UI.WebControls.RadioButton>()
                            where r.GroupName == groupName
                                && r.Checked 
                            select r;
    
                if (query.Any())
                {
                    return query.First().Attributes["value"].ToString();
                }
    
                return string.Empty;
    
            }


    Bueno es un poco "ortodoxo" y no me gusta... pero mira la ultima parte que una vez que encuentas cual se selecciono debemos ubicar el valor con el .Attributes y pasarle el string del nombre del atrut


    OPCION 2: Utilizando RadioButtonLIst (Recomendacion)

    Aqui es mas facil.. solo tienes un lista... 

        <asp:RadioButtonList id="radioButtonList1" runat="server">
             <asp:ListItem Value="1" Text=""></asp:ListItem>
             <asp:ListItem Value="2" Text=""></asp:ListItem>
             <asp:ListItem Value="3" Text=""></asp:ListItem>
             <asp:ListItem Value="4" Text=""></asp:ListItem>
             <asp:ListItem>Item 5</asp:ListItem>
             <asp:ListItem>Item 6</asp:ListItem>
          </asp:RadioButtonList>

    Como varas en cada Item el texto es "" (vacio) para que no te moleste el label que escribe y queda como tu necesitas...  
    y recuperar? SImple ... mira la propiedad "SelectedValue" (una exquisitez)

    protected void btnAceptar_Click(object sender, EventArgs e)
            {
                litValorSeleccionado.Text = radioButtonList1.SelectedValue;
            }

    Pero bueno el inconveniente... es la UI para que quede en modo tabla que tienes... se puede pero es un poquito mas dificil. 

    Bueno dale una mirada... 

    Enlaces que te pueden ayudar

    Espero que te sirva de ayuda o guia


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    • Marcado como respuesta fredsale viernes, 20 de marzo de 2015 4:24
    jueves, 19 de marzo de 2015 22:21

Todas las respuestas

  • hola

    aconsejaria que dentro del template del repeates definas un RadioButtonList (puedes indicarle que muestre los opcion en horizontal estableciendo la direccion) de esta forma es mas simple de ubicar el control y asignarle el valor

    ASP.NET RadioButtonList in Repeater?

     Dim radioList As RadioButtonList = TryCast(item.FindControl("radio"), RadioButtonList)
    
     radioList.SelectedValue = ...


    o sea buscas el control dentro del item y le asignas el valor

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta fredsale jueves, 19 de marzo de 2015 20:41
    jueves, 19 de marzo de 2015 15:29
  • Hola  fredsale

    Como te comenta Leandro, recomendacion es utilizar RadioButtonList, solo ...lo malo... es el estilo para que quede justamente como estas necesitando. PEro bueno tendrias que evaluarlo
    El problema a parte del estilo CSS llamemosle "estetico" es para recuperar algun "valor" es mas facil en RadioButtonLIst que en simples Radiobutton, igual se puede pero no viene de "fabrica" ;)

    Te explico porque con tu ejemplo asi nos queda registro

    OPCION 1: Simple radiobutton... no tienen propiedad "Value", pero se puede agregar ;)

    En tu caso no tienes posibilidad de agrgar un valor, pero como en todo webcontrol puedes agregar "atributos" lo que quieras y luego recuperarlo (no tienes intellisense pero se recupera)
    En tu ejemplo asi:
    SI tienes 4 radiobutton con el mismo GroupName (y lo coloque dentro de un PlaceHolder para que sea mas facil recuperar el valor)

    <asp:PlaceHolder ID="placeHolderRadioButton" runat="server">
             <asp:RadioButton ID="rb1" runat="server" GroupName="grupo1" value="1"  />
            <asp:RadioButton ID="rb2" runat="server" GroupName="grupo1" value="2" />
            <asp:RadioButton ID="rb3" runat="server" GroupName="grupo1" value="3" />
            <asp:RadioButton ID="rb4" runat="server" GroupName="grupo1" value="4" />
    
        </asp:PlaceHolder>

    Y el codigo... bueno tenemos que ver del groupNAme de radioButton cual es el esta checkeado, ayudemosno con LINQ, la idea (se puede refinar)

      protected void btnAceptar_Click(object sender, EventArgs e)
            {
                var valorSeleccionado = RadioButtonObtenerValorPorGrupo("grupo1");
                litValorSeleccionado.Text = valorSeleccionado;
    
            }
    
            private string RadioButtonObtenerValorPorGrupo(string groupName)
            {
                var query = from r in placeHolderRadioButton.Controls
                                            .OfType<System.Web.UI.WebControls.RadioButton>()
                            where r.GroupName == groupName
                                && r.Checked 
                            select r;
    
                if (query.Any())
                {
                    return query.First().Attributes["value"].ToString();
                }
    
                return string.Empty;
    
            }


    Bueno es un poco "ortodoxo" y no me gusta... pero mira la ultima parte que una vez que encuentas cual se selecciono debemos ubicar el valor con el .Attributes y pasarle el string del nombre del atrut


    OPCION 2: Utilizando RadioButtonLIst (Recomendacion)

    Aqui es mas facil.. solo tienes un lista... 

        <asp:RadioButtonList id="radioButtonList1" runat="server">
             <asp:ListItem Value="1" Text=""></asp:ListItem>
             <asp:ListItem Value="2" Text=""></asp:ListItem>
             <asp:ListItem Value="3" Text=""></asp:ListItem>
             <asp:ListItem Value="4" Text=""></asp:ListItem>
             <asp:ListItem>Item 5</asp:ListItem>
             <asp:ListItem>Item 6</asp:ListItem>
          </asp:RadioButtonList>

    Como varas en cada Item el texto es "" (vacio) para que no te moleste el label que escribe y queda como tu necesitas...  
    y recuperar? SImple ... mira la propiedad "SelectedValue" (una exquisitez)

    protected void btnAceptar_Click(object sender, EventArgs e)
            {
                litValorSeleccionado.Text = radioButtonList1.SelectedValue;
            }

    Pero bueno el inconveniente... es la UI para que quede en modo tabla que tienes... se puede pero es un poquito mas dificil. 

    Bueno dale una mirada... 

    Enlaces que te pueden ayudar

    Espero que te sirva de ayuda o guia


    Jose. A Fernandez | blog: http://geeks.ms/blogs/fernandezja

    • Marcado como respuesta fredsale viernes, 20 de marzo de 2015 4:24
    jueves, 19 de marzo de 2015 22:21
  • Gracias Leandro y Jose ambas respuestas me ayudaron mucho!!
    viernes, 20 de marzo de 2015 4:26