2010-08-25 13 views
5

मुझे दोहराना नियंत्रण में एक चेकबॉक्स क्लिक करने पर मेरे दोहराने में एक पंक्ति पर कुछ सर्वर पक्ष तर्क करने की आवश्यकता है।पुनरावर्तक या डेटालिस्ट में चेकबॉक्स ऑनक्लिक/आइटम कमांड

कोई भी इस बारे में कैसे जानता है?

जिस तरह से मैं इसे देखता हूं आप आइटम आइटम कमांड नहीं कर सकते हैं और यदि आप चेकबॉक्स एक्सक्लिक का उपयोग करते हैं तो आप दोहराना पंक्ति नहीं प्राप्त कर सकते हैं।

उत्तर

9

यहां एक त्वरित नकली बात है कि मैंने अतीत में ऐसा कैसे किया है।

<asp:Repeater id="repeater1" runat="server" OnItemDataBound="repeater1_OnItemDataBound" > 
     <ItemTemplate> 
      <asp:CheckBox ID="chk" runat="server" OnCheckedChanged="Check_Changed" AutoPostBack="true" /> 
     </ItemTemplate> 
    </asp:Repeater> 

codebehind:

public class Model { 
     public int Id { get; set; } 
     public string Name { get; set; } 
    } 

    public partial class Checkboxes : System.Web.UI.Page { 
     protected void Page_Load(object sender, EventArgs e) { 
      if(!IsPostBack) { 
       repeater1.DataSource = new List<Model> { 
           new Model { Id = 1, Name = "a" }, 
           new Model { Id = 2, Name = "b" }, 
           new Model { Id = 3, Name = "c" } }; 
       repeater1.DataBind(); 
      } 
     } 

     protected void repeater1_OnItemDataBound(Object sender, RepeaterItemEventArgs e) { 
      if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { 
       var item = e.Item.DataItem as Model; 
       if (item != null) { 
        var chk = e.Item.FindControl("chk") as CheckBox; 
        if (chk != null) { 
         chk.Text = item.Name; 
         chk.InputAttributes.Add("value", item.Id.ToString()); 
        } 
       } 
      } 
     } 

     protected void Check_Changed(Object sender, EventArgs e) { 
      var id = ((CheckBox) sender).InputAttributes["value"]; 
      //you now have access to the item id and can manipulate at will. 
     } 
    } 
+0

धन्यवाद इस काम करना चाहिए। इच्छा है कि रास्ते के बारे में एक कम दौर था ... +1 – Jason

+0

यह इस बात पर निर्भर करता है कि आप डेटा के साथ क्या करने की कोशिश कर रहे हैं। यदि यह एक पंक्ति के लिए एक साधारण डेटाबेस ध्वज अद्यतन है, तो JQuery के माध्यम से जुड़ा हुआ AJAX कॉलबैक एक बेहतर और क्लीनर दृष्टिकोण होगा। वास्तव में, यह शायद एक क्लीनर दृष्टिकोण है, इससे कोई फर्क नहीं पड़ता कि आप डेटा के साथ क्या कर रहे हैं। यह उपयोगकर्ताओं को पोस्टबैक के बिना एकाधिक चेकबॉक्स बदलने की अनुमति देगा। –

+0

यही वह है जो मैंने कर दिया। हालांकि नकली के लिए धन्यवाद। यह स्पष्ट रूप से सचित्र है कि यह JQuery दिशा में मुझे कितना जटिल और प्रेरित किया गया था। = डी – Jason

-1

आप पुनरावर्तक में प्रत्येक आइटम लूप करने के लिए onClick ईवेंट इस्तेमाल कर सकते हैं, और प्रत्येक बॉक्स के मान की जाँच करें, (IsChecked == सच है)।

बस यह सुनिश्चित करें कि आप दोहराने पर "डेटाबिंड()" नहीं बुला रहे हैं, अन्यथा इससे समस्याएं हो सकती हैं।

+0

तो अगर मुझे OnChange कार्यक्षमता चाहिए तो मुझे वर्तमान स्थिति का रिकॉर्ड रखना होगा? क्या कोई दूसरा रास्ता नहीं है? – Jason

+0

वर्तमान स्थिति प्रत्येक चेकबॉक्स के गुणों में दर्ज की गई है, इसलिए आपको प्रत्येक चेकबॉक्स के माध्यम से केवल लूप के अलावा अतिरिक्त कुछ भी नहीं करना चाहिए। – Brett

2

इस codebehind का प्रयास करें:

protected void Checked_Changed(object sender, EventArgs e) 
     { 
      var item = ((CheckBox)sender).Parent as RepeaterItem; 
// now you have the repeater row. You can travers further up the controls if you use Parent.Parent... 

     } 
संबंधित मुद्दे