2009-07-29 23 views
23

Aşağıdaki yineleyici aşağıdayım ve arkasında lblA bulmaya çalışıyorum ve başarısız oluyor.Asp.net tekrarlayıcı içinde kontrol bulunamıyor mu?

<asp:Repeater ID="rptDetails" runat="server"> 
    <HeaderTemplate> 
     <table> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr> 
      <td><strong>A:</strong></td> 
      <td><asp:Label ID="lblA" runat="server"></asp:Label> 
      </td> 
     </tr> 
    </ItemTemplate> 
</asp:Repeater> 
</table> 

İlk Denedim,

Label lblA = (Label)rptDetails.FindControl("lblA"); 

ama lblA denedim Sonra

null idi

Label lblA = (Label)rptDetails.Items[0].FindControl("lblA"); 

ama Öğeler oldu: biçimlendirme Aşağıda yaptığım çabalarıdır 0 m tekrarlayıcı 1 öğe plakası içeriyor olsa bile

cevap

28

Öznitelik OnItemDataBound="myFunction"

ayarlamanız gerekir Ve sonra kodunuzda arada iç içe geçmiş tekrarlayıcı için bu tam aynı yaklaşımı kullanabilirsiniz

void myFunction(object sender, RepeaterItemEventArgs e) 
{ 
    Label lblA = (Label)e.Item.FindControl("lblA"); 
} 

aşağıdakileri yapın. IE:

<asp:Repeater ID="outerRepeater" runat="server" OnItemDataBound="outerFunction"> 
<ItemTemplate> 
    <asp:Repeater ID="innerRepeater" runat="server" OnItemDataBound="innerFunction"> 
    <ItemTemplate><asp:Label ID="myLabel" runat="server" /></ItemTemplate> 
    </asp:Repeater> 
</ItemTemplate> 
</asp:Repeater> 

Sonra kodunuzda: çok sık el bir iç yineleyici öğeleri bağlayıcı insanları görmek ve kendileri için bir şeyler yapıyoruz ne kadar zor onlar farkında değilsiniz Tüm

void outerFunction(object sender, RepeaterItemEventArgs e) 
{ 
    Repeater innerRepeater = (Repeater)e.Item.FindControl("innerRepeater"); 
    innerRepeater.DataSource = ... // Some data source 
    innerRepeater.DataBind(); 
} 
void innerFunction(object sender, RepeaterItemEventArgs e) 
{ 
    Label myLabel = (Label)e.Item.FindControl("myLabel"); 
} 

.

+0

Biraz kafam karıştı. Aslında yaptığım şey, 1 sayfadaki Ayrıntıları Görüntüle bağlantısını tıkladığımda, tekrarlayıcıya ve page_load'a sahip olan başka bir sayfada ayrıntılı bir görünüme götürür, lblA – Xaisoft

+0

Düzenlenen'i bulmaya çalışıyorum. Umarım bu biraz daha açıklar. –

+0

Tamam, bitirdiğim şey bir DataTable değişkenini sınıfın en üst seviyesine taşıyordu. Sonra ItemDataBoundEvent öğesini oluşturdum ve orada tekrarlayıcıda lblA'yı kontrol ettim ve eğer bulduysa DataTable'da bir satırdan aldığım bir metne ayarladım. Bunu anlamamda doğru muyum? Teşekkürler – Xaisoft

1

Repeater.ItemDataBound Event'u araştırın. Önce bağlamak gerekir VB.NET

Protected Sub rptDetails_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles rptDetails.ItemDataBound  
     If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then 
     Dim lblA As Label = CType(e.Item.FindControl("lblA"), Label) 
     lblA.Text = "Found it!" 
     End If 
    End Sub 
1

Kodu. örneğin
)

rptDetails.DataSource = dataSet.Tables["Order"]; 

rptDetails.DataBind(); 
7

Ben de aynı sorun vardı.

Öğeleri döngülerken ürün tipi ürünümüzü eksik. Yineleyicideki ilk öğe, başlığı ve başlığın, aradığımız asp öğelerine sahip olmamasıdır.

bu deneyin:

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    {Label lblA = (Label)rptDetails.Items[0].FindControl("lblA");} 
+0

Teşekkürler adamım, aynı problemim var ve çok fazla zaman harcıyorum. problemi çöz. SO harika! – Kamran

+0

ditto - bu gerçekten MSDN'lerin kendi örneklerine dahil edilmiş olmalıydı ... ama bundan ne beklemeliyiz? – Rich

İlgili konular