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.