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

Añadir atributo a cada elemento de un Radio Button List

Estas en el tema de Añadir atributo a cada elemento de un Radio Button List en el foro de ASPX (.net) en Foros del Web. Hola. Muy buenas. Estoy intentando añadir un atributo a cada elemento de un control Radio Button List. Añado varios controles de este tipo dinámicamente y ...
  #1 (permalink)  
Antiguo 07/02/2006, 08:17
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Añadir atributo a cada elemento de un Radio Button List

Hola. Muy buenas. Estoy intentando añadir un atributo a cada elemento de un control Radio Button List. Añado varios controles de este tipo dinámicamente y cada elemento de este control debería tener un evento de javascript de cliente.
Código:
Dim ID As String = Me.ddlTipo.SelectedValue
        Dim ds As DataSet = OrigenDatos.EjecutaPA("PA_GruposSuperiores", ID)
        For Each dt As DataTable In ds.Tables
            Dim lbl As New Label
            lbl.Text = QuitaEspacios(dt.Rows(0).Item("Tipo"))
            lbl.CssClass = "titulillo"
            Me.pnlGruposSuperiores.Controls.Add(lbl)
            Dim barra As New HtmlControls.HtmlGenericControl
            barra.InnerHtml = "<HR class='seccion'>"
            Me.pnlGruposSuperiores.Controls.Add(barra)
            Dim rbl As New RadioButtonList
            rbl.DataSource = dt
            rbl.DataTextField = "Nombre"
            rbl.DataValueField = "ID"
            rbl.DataBind()
            rbl.RepeatDirection = RepeatDirection.Horizontal
            rbl.RepeatColumns = 4
            For i As Integer = 0 To rbl.Items.Count - 1
                rbl.Items(i).Attributes.Add("onClick", "GruposSuperiores(this)")
            Next
            Me.pnlGruposSuperiores.Controls.Add(rbl)
        Next
En el código HTML de la página debería quedar algo así:
Código HTML:
....
<input id="_ctl2_4" type="radio" name="_ctl2" value="167" onClick="GruposSuperiores(this)" />
<input id="_ctl2_5" type="radio" name="_ctl2" value="167" onClick="GruposSuperiores(this)" />
.....
Un saludo y gracias
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 08/02/2006, 03:10
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Bueno, más o menos lo he resuelto. Os pongo todo el código vb y la función javascript que uso. Con esto consigo que, todos los readiobuttonlist funcionen como uno sólo, es decir que sólo se pueda seleccionar una opción entre todos ellos:
Código:
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        If Not Page.IsPostBack Then
            Dim strSel As String = "SELECT * FROM tipos WHERE ID <> 1 ORDER BY ID"
            Dim dt As DataTable = OrigenDatos.DevuelveDT(strSel)
            Me.ddlTipo.DataSource = dt
            Me.ddlTipo.DataTextField = "Nombre"
            Me.ddlTipo.DataValueField = "ID"
            Me.ddlTipo.DataBind()
            CargaGruposSuperiores()
        End If

    End Sub

    Private Sub ddlTipo_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ddlTipo.SelectedIndexChanged

        CargaGruposSuperiores()

    End Sub

    Private Sub CargaGruposSuperiores()

        Dim ID As String = Me.ddlTipo.SelectedValue
        Dim ds As DataSet = OrigenDatos.EjecutaPA("PA_GruposSuperiores", ID)
        For Each dt As DataTable In ds.Tables
            Dim lbl As New Label
            lbl.Text = QuitaEspacios(dt.Rows(0).Item("Tipo"))
            lbl.CssClass = "titulillo"
            Me.pnlGruposSuperiores.Controls.Add(lbl)
            Dim barra As New HtmlControls.HtmlGenericControl
            barra.InnerHtml = "<HR class='seccion'>"
            Me.pnlGruposSuperiores.Controls.Add(barra)
            Dim rbl As New RadioButtonList
            rbl.DataSource = dt
            rbl.DataTextField = "Nombre"
            rbl.DataValueField = "ID"
            rbl.DataBind()
            rbl.RepeatDirection = RepeatDirection.Horizontal
            rbl.RepeatColumns = 4
            rbl.Attributes.Add("onClick", "GruposSuperiores(this.id);")
            Me.pnlGruposSuperiores.Controls.Add(rbl)
        Next
        Me.pnlGruposSuperiores.EnableViewState = True
        Me.ddlTipo.SelectedValue = ID

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Response.Write(Me.pnlGruposSuperiores.HasControls)

    End Sub
Código HTML:
 <script language="javascript">
		function GruposSuperiores(id)
		{
			var f = document.forms[0].elements; 
			for (var i = 0 ; i < f.length ; ++i)
			{ 
				if (f[i].type == "radio")
				{ 
					var radiogroup = f[i].name; 
					if(radiogroup != id)
					{	
						var obj = document.getElementsByName(radiogroup);
						for(var j = 0 ; j < obj.length; ++j)
						{
							obj[j].checked = false;
						}
					}
				}
			} 
		}
		</script> 
El problema está en que no me mantiene los controles añadidos al panel al hacer un postback ni tampoco puedo recuperar los valores marcados. De hecho, la linea en rojo devuelve siempre false.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #3 (permalink)  
Antiguo 08/02/2006, 05:21
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Evidentemente los valores no te los mantiene porque recargas el control, yo haría lo siguiente:

Crear, p.ej un textbox multilinea y oculto (de servidor y oculto mediante estilo).

En la función javascript agregar que en el onclick, cada radiobuttonlist grabe, en el textbox, p.ej. su id + # + valor.

Asi cuando hagas postback, si es la primera vez, cargas los controles, si no, además de cargar los controles, le asignas los valores que leas del textbox.

No se, es una idea, un tanto liada, pero una idea.
  #4 (permalink)  
Antiguo 08/02/2006, 08:30
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Gracias por la respuesta Jose_minglein2. Lo que he hecho al final es sacar la llamada a CargaGruposSuperiores() fuera del condicional Page.IsPostBack y se vuelve a cargar todo, aunque manteniedo los valores que tenía, es decir, marcada la opción.

Gracias de todas formas y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #5 (permalink)  
Antiguo 08/02/2006, 09:43
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Si haces lo que te digo puedes cargarla con la opción seleccionada por el usuario, parece algo complejo pero en realidad no lo es.

Si decides hacerlo, sería algo así:
Código:
<script language="javascript">
		function GruposSuperiores(id)
		{
			var f = document.forms[0].elements; 
			for (var i = 0 ; i < f.length ; ++i)
			{ 
				if (f[i].type == "radio")
				{ 
                                        var valor = document.getElementById('mitextbox').value ;
document.getElementById('mitextbox').value= valor+'#'+f[i].name
					var radiogroup = f[i].name; 
					if(radiogroup != id)
					{	
						var obj = document.getElementsByName(radiogroup);
						for(var j = 0 ; j < obj.length; ++j)
						{
							obj[j].checked = false;
						}
					}
				}
			} 
		}
		</script>
Y luego en el postback, cargas de nuevo el control y miras los valores cargados en el textbox, asignadoselos a tu radiobutton.
  #6 (permalink)  
Antiguo 08/02/2006, 10:40
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 5 meses
Puntos: 4
Gracias por el esfuerzo, pero como te he comentado ya funciona sin problemas.

Muchas gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
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 22:56.