2009-02-18 18 views
13

Bir grup görüntü oluşturmak için asp.net tekrarlayıcı kullanıyorum. Görüntü biçimlendirme hepsi aynıdır, bu nedenle standart <ItemTemplate> düzgündür. Ancak, bir görüntüyü bir div içine sarmak istiyorum. Tekrarlayıcıya 25'den fazla fotoğraf eklediğimi ve div başına 5 fotoğraf istediğimi söyleyelim. Şartlı olarak div için başlangıç ​​ve bitiş etiketlerini oluşturma hakkında nasıl giderim?ASP.NET Tekrarlayıcı Şablonu, Her Nth öğesi için Koşullu Kod

Bu, for döngüsü için daha uygun bir durum mu?

+0

Bunu, aşağıda gösterilen kavramları kullanarak elde edebilirsiniz, _you_ sadece amacınıza uygun şekilde ayarlamalısınız. StackOverflow kullanıcıları sizin için 'teh codez' yazmak için burada değiller, birbirimizin öğrenmesine yardımcı olmak için buradayız. Bize yazdığınız/denediğiniz kodu gösterin ve size yardımcı olmanıza yardımcı olabiliriz. – Dhaust

+1

Yup, sadece – ckarbass

cevap

23

Bukodda herhangi bir şey için gerek kalmadan, sizin için çalışması gerekir (tekrarlayıcı bağlama dışındaki ..): Asp.Net WebForms inanılmaz RAD size verebilir nerede

İşte
<asp:Repeater ID="repImages" runat="server"> 
<HeaderTemplate><div></HeaderTemplate> 

<ItemTemplate> 
<%# (Container.ItemIndex != 0 && Container.ItemIndex % 5 == 0) ? @"</div><div>" : string.Empty %> 
<asp:Image ID="imgGallery" runat="server" ImageUrl='<%# /* your code here */ %>' /> 
</ItemTemplate> 

<FooterTemplate></div></FooterTemplate> 
</asp:Repeater> 
+0

Üçüncül operatör yerine cevabımda düzenli bir 'if' ifadesini nasıl kullanabileceğimi bilen var mı (sondaki boş dize seçeneğini kaybetmek için)? – Nick

+5

Mümkün değil, if deyimi bir ifade değil (bir değer değerlendirmez), bu nedenle veri bağlama sözdiziminde kullanılamaz. –

+0

@michielvoo - Durumun böyle olduğunu düşündüm, açıklama için teşekkürler – Nick

2

Yinelenenler ItemTemplate öğenize div etiketlerinin olmasını istediğiniz iki boş etiket denetimi ekleyin.

Ardından Tekrarlayıcı'ya bir ItemDataBound olayı ekleyin. Bu, ilk div işlemek için biraz oynanması gerekir ve ise (e.Item.ItemIndex + 1 gibi bir şey yapmanız gerekebilir -

Protected Sub Repeater1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) 
    If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then 
     If e.Item.ItemIndex Mod 5 = 0 Then 
      Dim lblDivStart As Label = CType(e.Item.FindControl("lblDivStart"), Label) 
      Dim lblDivEnd As Label = CType(e.Item.FindControl("lblDivEnd"), Label) 
      lblDivStart.text = "<div>" 
      lblDivEnd.text = "</div>" 
     End If 
    End If 
End Sub 

Not:

Sonra ItemDataBound olayı bu kodu eklemek) Div'ları tam olarak istediğiniz yerde göstermek için Mod 5 = 0. Aspx sayfasında

: ASPX sayfasında İşaretlemenizi tutmak isterseniz siz de David'in yöntem üzerinde bu varyasyonu deneyebiliriz
DataListItem.ItemIndex Property
DataList.ItemDataBound Event

+1

sorusunu açıklığa kavuşturun. NET deliliğini durdurun! Php'de bu şablonda bir foreach içinde basit bir durum olurdu. Her neyse, çözüm için +1. – rick

+0

HaHa. Adil çağrı Rick. Eminim .NET'te bunu yapmanın daha akıllı bir yolu var, bunu bilecek kadar akıllı değilim;) – Dhaust

+6

Bunu .NET'te yapmanın daha akıllı yolu ASP.NET MVC'ye geçiş yapmaktır –

3

: Daha fazla bilgi için

<ItemTemplate> 
<asp:Literal runat="server" ID="divStart" Text="<div>" /> 
<asp:Image ....> 
<asp:Literal runat="server" ID="divEnd" Text="</div>" /> 
</ItemTemplate> 

Codebehind öğesinde ItemDataBound olayında:

e.Item.FindControl("divStart").Visible 
    = e.Item.FindControl("divEnd").Visible 
    = e.Item.ItemIndex % 5 == 0; 
+0

Yep kullanmaktır, bu sayfada işaretlemeyi tutmak iyi bir çağrıdır. Benim versiyonumdan da muhtemelen daha okunabilir;) – Dhaust

+1

Hazır etiketlerin iyi kullanımı. Çok fazla kişi, etiket denetimi ile oluşturulmuş etiketleri olmadan, söz dizimi denetimi aynı olduğunda, sayfada işaretleme yazmak için etiketleri kullanır gibi görünüyor. –

10

olduğunu verimlilik. Yeni ListView denetimini kullanabilir ve "grup" başına öğe sayısını ayarlayabilirsiniz; bu, her bir öğenin yanı sıra bir grubu çevreleyen HTML'yi ayarlamanıza olanak tanır. Bu şekilde grubu koşullu etiketlerle sarabilirsiniz.

<asp:ListView ID="ListView1" runat="server" DataKeyNames="id" DataSourceID="LinqDataSource1" GroupItemCount="3"> 
<LayoutTemplate> 
    <div id="layout"> 
     <asp:PlaceHolder ID="groupPlaceholder" runat="server"></asp:PlaceHolder> 
    </div> 
</LayoutTemplate> 
<GroupTemplate> 
    <div class="group"> 
     <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder> 
    </div> 
</GroupTemplate> 
<EmptyDataTemplate> 
    <span>No data was returned.</span> 
</EmptyDataTemplate> 
<ItemTemplate> 
    <div class="item"> 
     <img alt='<%# Eval("title") %>' title='<%# Eval("title") %>' 
      src='<%# Eval("filename","photos/{0}") %>' /> 
    </div> 
</ItemTemplate> 
</asp:ListView> 
İlgili konular