2010-03-20 12 views
19

ऐसा करने के लिए मैं सोच सकता हूं कि सभी तरीकों से यह बहुत ही हैकिश लगता है। ऐसा करने का सही तरीका क्या है, या कम से कम सबसे आम?पुनरावर्तक नियंत्रण में टेक्स्टबॉक्स एक्सेस करना

मैं LINQ-to-SQL क्वेरी से छवियों का एक सेट पुनर्प्राप्त कर रहा हूं और इसे दोहराता हूं और कुछ अन्य डेटा दोहराने वाला हूं। मुझे दोहराने वाले प्रत्येक आइटम में एक टेक्स्टबॉक्स जोड़ने की ज़रूरत है जो उपयोगकर्ता को प्रत्येक छवि का शीर्षक बदलने देगी, जो फ़्लिकर के समान ही है।

मैं पुनरावर्तक नियंत्रण में टेक्स्टबॉक्स का उपयोग कैसे करूं और पता हूं कि टेक्स्टबॉक्स किस छवि से संबंधित है?

यहाँ पुनरावर्तक नियंत्रण एक सबमिट बटन जिसमें सभी छवि पंक्तियां अपडेट होगा साथ, कैसा दिखेगा है Linq करने वाली एसक्यूएल:

alt text http://casonclagg.com/layout.jpg

संपादित करें:

यह कोड

बस सुनिश्चित करें कि आप बाध्यकारी outsi द्वारा अपने मूल्यों को दूर नहीं करते हैं अगर (! पेज.इस्पोस्टबैक) की तरह मेरे .. ओह।

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <div class="itemBox"> 
      <div class="imgclass"> 
       <a title='<%# Eval("Name") %>' href='<%# Eval("Path") %>' rel="gallery"> 
        <img alt='<%# Eval("Name") %>' src='<%# Eval("Path") %>' width="260" /> 
       </a> 
      </div> 
      <asp:TextBox ID="TextBox1" Width="230px" runat="server"></asp:TextBox> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

और सबमिट क्लिक करें:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    foreach (RepeaterItem item in Repeater1.Items) 
    { 
     TextBox txtName = (TextBox)item.FindControl("TextBox1"); 
     if (txtName != null) 
     { 
      string val = txtName.Text; 
      //do something with val 
     } 
    } 
} 
+0

क्या आप पोस्टबैक के बाद क्लाइंट या सर्वर पर टेक्स्टबॉक्स तक पहुंचने का प्रयास कर रहे हैं? –

+0

सबमिट_Click में सर्वर – Jason

उत्तर

31

आप बटन पर क्लिक निम्नलिखित की तरह कुछ करने की कोशिश की है: -

foreach (RepeaterItem item in Repeater1.Items) 
{ 
     TextBox txtName= (TextBox)item.FindControl("txtName"); 
     if(txtName!=null) 
     { 
     //do something with txtName.Text 
     } 
     Image img= (Image)item.FindControl("Img"); 
     if(img!=null) 
     { 
     //do something with img 
     } 
} 

/* कहाँ txtName और Img पाठ बॉक्स के आईडी कर रहे हैं और क्रमशः पुनरावर्तक में छवि नियंत्रण। */

उम्मीद है कि इससे मदद मिलती है।

+0

आपको "txtName" का मान नहीं पता, क्या आप? – Jason

+1

आपको उपरोक्त उदाहरण में उस txtName.Text संपत्ति का उपयोग करके मान प्राप्त होगा। –

+0

मेरा मतलब था कि आप नियंत्रण का नाम नहीं जानते हैं। तो आप इसे कैसे ढूंढते हैं ... जैसे FindControl ("nameOfControl")। NameOfControl क्या है? – Jason

0

पोस्टबैक पर, आप repeater.Items में RepeaterItems के संग्रह से अधिक पुनरावृति कर सकते हैं। इसके बाद आप कोड के साथ एक पाठ बॉक्स को पुनः प्राप्त कर सकता है इस तरह के रूप

TextBox tbDemo = (TextBox)rptr.Items[index].FindControl("textBox"); 
11

.aspx

 <asp:Repeater ID="rpt" runat="server" EnableViewState="False"> 
     <ItemTemplate> 
       <asp:TextBox ID="txtQty" runat="server" /> 
     </ItemTemplate> 
     </asp:Repeater> 

.cs

 foreach (RepeaterItem rptItem in rpt.Items) 
     { 
      TextBox txtQty = (TextBox)rptItem.FindControl("txtQty"); 
      if (txtQty != null) { Response.Write(txtQty.Text); }   
     } 

EnableViewState = "false" अपने पुनरावर्तक में जोड़ने के लिए सुनिश्चित करें, अन्यथा आप रिक्त स्ट्रिंग मिल जाएगा। (वह मेरा समय बर्बाद कर रहा है, तुम्हारा बर्बाद न करें :))

+2

+1 को सक्षम करने के लिए EnableViewState –

+0

क्या होगा यदि मैं सभी टेक्स्टबॉक्स प्राप्त करना चाहता हूं और इसे 'रीडोनली' संपत्ति को सही करने के लिए किसी सूची में जोड़ना चाहता हूं? – Si8

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