Principales respuestas
Establecer value de un radiobutton en un repeater

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
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
-
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
- RadioButtonList
https://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.radiobuttonlist.aspx
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
- RadioButtonList
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
-
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
- RadioButtonList
https://msdn.microsoft.com/es-es/library/system.web.ui.webcontrols.radiobuttonlist.aspx
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
- RadioButtonList
-