2016-04-01 22 views
0

Bu, şu anda karşılaştığım çok garip bir sorundur. Verilerimi doldurduğum kodumda Repeater var. Bu amaçlandığı gibi çalışıyor. Benim yineleyici üzerindeBir foreach döngüsünde çift sıfır dizin C#

Böyle bir OnItemDataBound var:

<asp:Repeater ID="repeater" Visible="true" runat="server" OnItemDataBound="getOverlays"> 
    <ItemTemplate> 
    <span><%#Eval("name") %></span> 
    </ItemTemplate> 
</asp:Repeater> 

Benim tekrarlayıcı doğru verileri görüntüler, benim veri kaynağı tüm öyle span etiketindeki çıktılanmasını üç ismi içerdiğini söylemek! Bu noktaya kadar her şey iyi çalışıyor.

Şimdi garip kısım geliyor. Benim getOverlays işlevi ben bu kodu vardır: Benim dünyamda

protected void getOverlays(object sender, RepeaterItemEventArgs e) { 
    foreach (RepeaterItem item in repeater.Items) { 
    Response.Write(item.ItemIndex); 
    } 
} 

, bu boşluk

0 
1 
2 

dışarı yazardı ama şimdi kod satırı hangi benim için

0 
0 
1 

dışarı yazıyor büyük bir gizem! Daha önce böyle bir sorunla karşılaştı mı? Neyi yanlış yaptım?

açıkça benim veri kaynağı 3 isimlerini görür ve ben ilk iki endeksleri Biraz benim endeksi birinci tekrarlanmasından sonra resetted alır 0.

aynı endeksi alır sadece bu üç endeksler almak yapmak ya da bir şey, ama daha önce bu problemi hiç yaşamadım, herkes bunun için bir çözüm buldu ya da indekslerimin neden bozuk olduğunu doğru şekilde işaret edebilir mi?

Önceden teşekkür ederiz.

+0

Açıklıktaki ilk kod snippet çıkışı nedir? (Gerçek çıktı) –

+0

Alfie; doğru değeri çıkarıyor, bu yüzden şaşkınım çünkü OnItemDataBound dizinindeki indeksleri görene kadar her şey doğru. –

+0

OnItemDataBound yöntemi, tekrarlayıcıya eklenen her öğe için çağrılır ve öğenin Öğeler koleksiyonuna eklenmesinden önce olduğuna inanıyorum.Üç öğe ile üç kez çağrılacak. İlk çağrıldığında koleksiyon boş. İkinci kez çağrıldığında bir öğe (dizin 0), üçüncü kez çağrıldığında iki öğe (dizin 0 ve 1) içerir. Neyi başarmaya çalışıyorsun? –

cevap

İlgili konular