2010-10-27 40 views
6

मेरे पास मेरे पृष्ठ में दोहराना नियंत्रण है। रेडियो बटन की जांच करने के लिए मुझे सभी पंक्तियों (आइटम टेम्पलेट) में एक रेडियो बटन होना चाहिए, शेष रेडियो बटनों को अनचेक करना होगा।दोहराना नियंत्रण में रेडियो बटन सूची

यह कैसे करें?

अग्रिम धन्यवाद, टो

उत्तर

1

बस रेडियो बटन करने के लिए एक OnCheckedChanged ईवेंट जोड़ें, पाश सभी पुनरावर्तक में radiobuttons करके उन्हें अचयनित करें। यदि आप पोस्टबैक नहीं चाहते हैं तो आप UpatePanel का उपयोग कर सकते हैं।

.aspx

<asp:Repeater ID="Repeater1" runat="server" > 
    <ItemTemplate> 
     <asp:RadioButton ID="RadioButton1" runat="server" OnCheckedChanged="RadioButton1_OnCheckedChanged" AutoPostBack="true" /> 
    </ItemTemplate> 
</asp:Repeater> 

.cs

protected void RadioButton1_OnCheckedChanged(object sender, EventArgs e) 
{ 
    foreach (RepeaterItem item in Repeater1.Items) 
    { 
     RadioButton rbtn = (RadioButton)item.FindControl("RadioButton1"); 
     rbtn.Checked = false; 
    } 
    ((RadioButton)sender).Checked = true; 
} 
+1

ऊपर के उदाहरण के लिए, यदि आप संपत्ति को "GROUPNAME" जोड़ने के नियंत्रण के लिए <एएसपी: RadioButton> , यह एक ही समूह के तहत सभी रेडियो बटन जोड़ देगा, इसलिए केवल एक रेडियो बटन का चयन किया जाएगा। – Shivkant

+0

ओह हाँ .. हमें इसके बजाय इसका उपयोग करना चाहिए! – bla

+0

एक अपडेट पैनेल अभी भी एक पोस्टबैक का कारण बन जाएगा, बस यह एक AJAX पोस्टबैक होगा। इसमें अभी भी समय लगेगा क्योंकि इसे सर्वर से/से रूट करना होगा। – nealkernohan

10

दुर्भाग्य से, यह एक ज्ञात बग (http://support.microsoft.com/kb/316495) कि GroupName संपत्ति के रूप में उम्मीद है जब एक पुनरावर्तक में इस्तेमाल किया काम नहीं करता है । समस्या यह है कि पुनरावर्तक INamingContainer इंटरफ़ेस लागू करता है जिसके लिए सभी नेस्टेड नियंत्रणों को HTML पर प्रस्तुत किए जाने पर अद्वितीय नाम होना आवश्यक है। इससे रेडियो बटन तोड़ने का कारण बनता है क्योंकि उनके लिए सही तरीके से काम करने के लिए उनके पास समान नाम होना चाहिए।

2 काम arounds है कि मैं का सामना करना पड़ा हैं:

1 - पहले एक क्लाइंट-साइड जावास्क्रिप्ट समाधान है। यह Microsoft support द्वारा प्रदान किया गया था। या संस्करण here पढ़ने के लिए आसान है। निर्देश इस प्रकार हैं।

function SetUniqueRadioButton(nameregex, current) 
{ 
     re = new RegExp(nameregex); 
     for(i = 0; i < document.forms[0].elements.length; i++) 
     { 
      elm = document.forms[0].elements[i] 
      if (elm.type == 'radio') 
      { 
        if (re.test(elm.name)) 
        { 
          elm.checked = false; 
        } 
      } 
     } 
     current.checked = true; 
} 

अब समारोह पुनरावर्तक के OnDataItemBound घटना में रेडियो बटन को लिंक किया जाना आवश्यक: सिर में निम्नलिखित जावास्क्रिप्ट को शामिल करें। अपने RadioButton नियंत्रण और GroupName के साथ "RadioGroup" के नाम आपने चुना है के साथ "RadioButton" बदलें:

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
     if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return; 
     RadioButton rb = (RadioButton) e.Item.FindControl("RadioButton"); 
     string script = "SetUniqueRadioButton('Repeater1.*RadioGroup',this)"; 
     rb.Attributes.Add("onclick", script); 
} 

2 - दूसरा समाधान एक सर्वर साइड कि RadioButton से विरासत एक कस्टम usercontrol का उपयोग कर समाधान है। ट्यूटोरियल और स्रोत कोड यहां डाउनलोड किया जा सकता है: http://www.codeproject.com/KB/webforms/How_group_RButtons.aspx

0

मुझे पता है कि यह पुराना है, लेकिन बटन काम नहीं करने का कारण यह है क्योंकि नाम विशेषता ओवरराइट की जा रही है। यदि jQuery का उपयोग करते हैं, तो आप रेडियो बटन को कक्षा में असाइन कर सकते हैं और फिर नाम का नाम नए नाम को ओवरराइड करने के लिए सेट कर सकते हैं।

$('.MyRadioClass').attr("name","MyFixedName"); 
0

एक और आसान विकल्प है, जहां कोई फैंसी स्वरूपण की आवश्यकता है, एक RadioButtonList उपयोग करने के लिए है:

<asp:RadioButtonList ... /> 
संबंधित मुद्दे