Radio Buttons in a DataList

I have a DataList control that has an image, a label, and a radio button in the ItemTemplate. My problem is that I can not group the radio buttons for some reason. I am setting the same GroupName property to every radio button in the ItemDataBoud event, but I can still select multiple radio buttons at the same time. Can anyone help please!
Who is Participating?

Improve company productivity with a Business Account.Sign Up

David H.H.LeeConnect With a Mentor Commented:
djaldogz ,

Use this :
client script
<script language="javascript">
function checkOne(selObj)
      var items=document.Form1 ; //your form name
      for(var i=0;i<items.length;i++)
            if(items.elements[i].type=="radio")//detect radio button
                  if(items.elements[i].id.indexOf("DataList1")>-1)//datalist name

<form id="Form1" method="post" runat="server">
<asp:DataList id="DataList1" runat="server">
      <asp:RadioButton ID="rdbEE" Runat="server" Text="Option" GroupName="EE"></asp:RadioButton>

 Private Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemDataBound
        If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then
            Dim rdbEE As RadioButton
            rdbEE = CType(e.Item.FindControl("rdbEE"), RadioButton)
            rdbEE.Attributes.Add("onClick", "javascript:checkOne('" & e.Item.ClientID & "_rdbEE')")
        End If
    End Sub

when you view the source, what name does it give the radio?

djaldogzAuthor Commented:
<input id="ImageList0_ImageList__ctl1_radioSelect" type="radio" name="ImageList0:ImageList:_ctl1:SwatchGroup" value="radioSelect" />
<input id="ImageList0_ImageList__ctl2_radioSelect" type="radio" name="ImageList0:ImageList:_ctl2:SwatchGroup" value="radioSelect" />
<input id="ImageList0_ImageList__ctl3_radioSelect" type="radio" name="ImageList0:ImageList:_ctl3:SwatchGroup" value="radioSelect" />

SwatchGroup is the GroupName that I assigned to each radio button
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

You will probably have to set the groupname programmatically after the DataList has been created.  itterate through all the items in the datalist and set each item's radiobutton's groupname.
djaldogzAuthor Commented:
Just tried it.
Did this after the DataBind event:

for(int j=0; j < myColorSelector.ImageList.Items.Count; j++)
RadioButton myRadio = (RadioButton)myColorSelector.ImageList.Items[j].FindControl("radioSelect");
myRadio.GroupName = "SwatchGroup";

Didn't work, nor did it change the source at all.

Confirm for me if I understand the situation:  You have one radio button in the ItemTemplate, not multiple buttons.  And when the data list shows you want to be able to select only one "item" by selecting that radio button, with any other selected radio buttons being de-selected.  This is what your html output looks like.  If I understand correctly, I have tried this myself just now a couple of different ways and it looks like you cannot override the name attribute with the GroupName property in a DataList like that.  I suspect the same would apply to the DataGrid.

You may need to use a link button that calls the Edit command, and then specify and EditItemTemplate to show something that marks the color as selected.

djaldogzAuthor Commented:
You understood the problem correctly. While a link button with an edit command would do the job, I really needed a radio button to work in this case. Thank you, though.


I tried your script, and it worked perfectly!

Thank you!
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.