Solved

Single select Checkbox in a Repeater control

Posted on 2006-07-04
7
1,582 Views
Last Modified: 2012-05-05
I Have a Checkbox in a repeater control.. like this

<asp:Repeater ID="rptDetails" runat="server" EnableViewState="False" >
                                <ItemTemplate>
                                    <tr>
                                        <td width="1%">
                                            <itemtemplate>
                                                <input id="chkSelected" type="checkbox" value="<%#Container.DataItem("ContactID")%>" name="ItemID" runat="server" />
                        </itemtemplate>
                                        </td>
                                    </tr>
                                    <tr>
                                         <td..... And so on with other values

The user should be able to check only checkbox at a time in this repeater control..
When the user checks a different check box in the repeater control.. then the one which the user selected previously must be unchecked automatically..

Also.. I want to loop through the repeater control.. to see which checkbox the user has checked..

How can i achieve this??


Please help!!!
0
Comment
Question by:Collindsouza
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
7 Comments
 
LVL 16

Assisted Solution

by:Edwin_C
Edwin_C earned 250 total points
ID: 17039950
It is a known problem that the GroupName of radiobutton does not work in databound coontrols such as repeater.  You can use the GroupRadioButton control in http://www.codeproject.com/aspnet/How_group_RButtons.asp to solve the problem.

The article also demonstrate how to read the value of the button.

Hope that helps
Edwin
0
 
LVL 9

Expert Comment

by:zaghaghi
ID: 17040781
1-i created a checkboxlist and bind it to a table
2-handle checkboxlist DataBound event:

    protected void CheckBoxList1_DataBound(object sender, EventArgs e)
    {
        int listItemIndex = 0;
        foreach (ListItem li in CheckBoxList1.Items)
        {
            string script = "clearall('" + CheckBoxList1.ClientID +"',"+
                listItemIndex.ToString()+");";
            li.Attributes.Add("onclick", script);
            listItemIndex++;
        }
    }

3-add this script aspx
this script uncheck all items in a checkboxlist except one that its index is in 2nd parameter

<script language="javascript">
function clearall(checkBoxListId, chk)
{
    objCtrl = document.getElementById(checkBoxListId);
   
    if(objCtrl == null)
    {
        return;
    }

    var i = 0;
    var objItem = null;


   
    for(i = 0; document.getElementById(checkBoxListId + '_' + i) != null; i++)
    {
        objItem = document.getElementById(checkBoxListId + '_' + i);

      if(i!=chk)
              objItem.checked = false;
    }
}
</script>
0
 
LVL 5

Author Comment

by:Collindsouza
ID: 17043463
Hi zaghaghi

Thank you for your reply..

Could you tell me how can i... created a checkboxlist and bind it to a table

Thanks in advance

Collin
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 9

Accepted Solution

by:
zaghaghi earned 250 total points
ID: 17043919
drag and drop a CheckBoxlist on your form, to create a checkboxlist, or use this way to create it programatically:

CheckBoxList cbl = new CheckBoxList();

then create a datasource, and set it to checkboxlist

I use this code in pageload event handler

            CheckBoxList1.DataSource = SqlDataSource1;
            CheckBoxList1.DataTextField = "RoleName";
            CheckBoxList1.DataValueField = "RoleCode";
            CheckBoxList1.DataBind();

if you want I upload my vs2005 solution that can help you more, if you want tell here
0
 
LVL 9

Expert Comment

by:zaghaghi
ID: 17043934
Oops I forget that set Datamember

            CheckBoxList1.DataMember = "tablename";
            CheckBoxList1.DataSource = SqlDataSource1;
            CheckBoxList1.DataTextField = "RoleName";
            CheckBoxList1.DataValueField = "RoleCode";
            CheckBoxList1.DataBind();
0
 
LVL 16

Expert Comment

by:Edwin_C
ID: 17048575
Allowing user to select only one choice from a number of choices is the typical function of radio button.  Why bother to create a checkbox list that resemble the function of radiobutton list?  
0
 
LVL 5

Author Comment

by:Collindsouza
ID: 17048834
Hi Zaghaghi,

I have taken the following steps to resolve this issue..

First :- i have selected a radio button so the user can select only one option at a time..

Second :- i set the value of the radio button as follows

 <input id="rbSelected" type="radio" value='<%# DataBinder.Eval(Container.DataItem,"ContactID") %>' runat="server" />

This value the Radio button has the respective ID..

Third :- on click of select button at the bottom of the page i loop through the repeater control and find out which radio button is checked  
 
   protected void btnSelect_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < rptDetails.Items.Count; i++)
        {
            if (((HtmlInputRadioButton)rptDetails.Items[i].FindControl("rbSelected")).Checked == true)
            {
                string ContactID = ((HtmlInputRadioButton)rptDetails.Items[i].FindControl("rbSelected")).Value;

            }
    }

Now.. so far so good...

Since all of this operation is happening on the pop up screen...

what i want to do now is when the looping is complete in  btnSelect_Click event... I want to refresh the parent page by passing the contactID as part of the query string.. meaning..
1). I now want to Close this pop up screen and i want to pass this contactID whicih i found through looping the repeater control.. to the parent window..
2). Currently the Parent url is...

http://localhost/IP/AddNewIP.aspx

i want the parent url to be http://localhost/IP/AddNewIP.aspx?ContactID='8386'

How can i achive this through the code behind btnSelect_Click
Please help
 
0

Featured Post

Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In an ASP.NET application, I faced some technical problems. In this article, I list them out and show the solutions that I found.  I hope it will be useful. Problem: After closing a pop-up window, the parent page should be refreshed automaticall…
User art_snob (http://www.experts-exchange.com/M_6114203.html) encountered strange behavior of Android Web browser on his Mobile Web site. It took a while to find the true cause. It happens so, that the Android Web browser (at least up to OS ver. 2.…
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question