2009-01-30 11 views
5

मुझे बटन के ऑनक्लिक ईवेंट में एक FooterTemplate के अंदर टेक्स्टबॉक्स से मूल्य प्राप्त करने की आवश्यकता है। मेरा पहला विचार मेरे पुनरावर्तक पर वस्तुओं-संपत्ति के माध्यम से लूप करना था, लेकिन जैसा कि आप इस नमूने में देख सकते हैं, इसमें केवल वास्तविक डाटाबेस आइटम शामिल हैं, न कि पाद लेख-आइटम।रीपरेटर में पाद लेख-वस्तु क्यों शामिल नहीं है। ऐसा लगता है?

ASPX:

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     Item<br /> 
    </ItemTemplate> 
    <FooterTemplate> 
     Footer<br /> 
     <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
    </FooterTemplate> 
</asp:Repeater> 
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 

कोड-behind.cs:

protected void Page_Load(object sender, EventArgs e) 
{ 
    ListItemCollection items = new ListItemCollection(); 
    items.Add("value1"); 
    items.Add("value2"); 
    Repeater1.DataSource = items; 
    Repeater1.DataBind(); 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    System.Diagnostics.Debug.WriteLine(Repeater1.Items.Count); 
} 

इस कोड को केवल उत्पादन "2" गिनती के रूप में है, तो मैं कैसे FooterTemplate अंदर मेरे पाठ बॉक्स संदर्भ के लिए मिलता है जाएगा ?

उत्तर

1

MSDN documentation से, आइटम केवल डेटासोर्स के आधार पर पुनरावर्तक इटम्स का एक सेट है जिसे आप बाध्यकारी हैं और शीर्षलेख या पाद लेख टेम्पलेट्स में आइटम शामिल नहीं करते हैं।

यदि आप टेक्स्टबॉक्स का संदर्भ देना चाहते हैं, तो आप पुनरावर्तक से आइटमडेटाबाउंड ईवेंट पर एक संदर्भ प्राप्त कर सकते हैं जहां आप पाद लेख के लिए परीक्षण कर सकते हैं।

उदा।

private void Repeater_ItemDataBound(Object Sender, RepeaterItemEventArgs e) 
{ 

    if (e.Item.ItemType == ListItemType.Footer) 
    { 
    TextBox textBox = e.Item.FindControl("TextBox1") as TextBox; 
    } 
}  
+0

उपयोगकर्ता किसी भी लेख दर्ज किया है से पहले: अब आप कुछ इस तरह कर सकते हैं । उपयोगकर्ता ने टेक्स्ट दर्ज करने के बाद ऑनक्लिक ईवेंट में वह टेक्स्ट कैसे प्राप्त कर सकता हूं? – Espo

+0

हाय एस्पो आपको रीप्टर 1 में खोदने के लिए एक रिकर्सिव विधि लिखनी होगी। टेक्स्टबॉक्स 1 नामक टेक्स्टबॉक्स के लिए नियंत्रण संग्रह जांचना। आप केवल पहले पाद लेख को देखकर इसे तेज कर सकते हैं। –

+0

रे: यही वह समाधान है जिसका मैं अब उपयोग कर रहा हूं, लेकिन यह टेक्स्टबॉक्स से मूल्य प्राप्त करने के लिए एक रिकर्सिव फ़ंक्शन बनाने के लिए "गंदा" लगता है। मैं उम्मीद कर रहा था कि ऐसा करने का एक साफ तरीका होगा। – Espo

1

आप पुनरावर्तक में नियंत्रण पा सकते हैं। इससे आपको दोहराना (RepeaterItems संग्रह) में सभी नियंत्रण मिलेंगे। Repeater_ItemDataBound होता

RepeaterItem footerItem=null; 
foreach(Control cnt in Repeater1.Controls) 
{ 
if(cnt.GetType() == typeof(RepeaterItem) && ((RepeaterItem)cnt).ItemType == ListItemType.Footer) 
{ 
footerItem = cnt; 
break; 
} 
} 
0

पाद लेख ताकि आप कुछ की तरह कर सकते हैं पुनरावर्तक के अंतिम बच्चे नियंत्रण होना चाहिए ..

RepeaterItem riFooter = Repeater1.Controls[Repeater1.Controls.Count - 1] as RepeaterItem; 
if (riFooter != null && riFooter.ItemType == ListItemType.Footer) { 
    TextBox TextBox1 = riFooter.FindControl("TextBox1") as TextBox; 
    if (TextBox1 != null) { 
     TextBox1.Text = "Test"; 
    } 
}