Asp.net iç içe Repeater veya iç içe ListView kullanımı
İç içe listeleme işlemlerinde aşağıdaki yöntem kullanılabilir. Örnekte dıştaki ListView kontrolünde odalar ve odalara ait genel bilgiler listelenirken; içte kullanılan Repeater kontolünde ise oda tipine göre odaların özellikleri dolduruldu.(Balkon, Bahçe, Havuz vs..)
Aynı işlem Repeater içinde Repeater veya ListView içinde ListView olarak da kullanılabilir.
Tasarım tarafı: kontrollerin yerleşimi
<table class="tabloRezervasyon">
<tr>
<th style="width: 30%;">Oda</th>
<th style="width: 10%; text-align:center;">Maks. Kişi</th>
<th style="width: 25%;">Bilgi</th>
<th style="width: 15%; text-align:center;">Fiyat</th>
<th style="width: 20%;">Rezervasyon</th>
</tr>
<asp:ListView ID="lvListe" runat="server" OnItemDataBound="lvListe_ItemDataBound">
<ItemTemplate>
<tr>
<td><a href="RezervasyonOdaDetay.aspx?odaTipId=<%#Eval("OdaTipId") %>" class="various" data-fancybox-type="iframe"><%#Eval("Fotograf").ToString()!=String.Empty ? "<img src=\"images/oda/" + Eval("Fotograf") + "\" alt=\"\" class=\"odaFoto\" />" : "<i class=\"fa fa-4x fa-camera odaFotoYok\"></i>" %></a>
<a href="RezervasyonOdaDetay.aspx?odaTipId=<%#Eval("OdaTipId") %>" class="turuncu17 various" data-fancybox-type="iframe"><%#Eval("OdaAd") %></a>
<br />
<br />
<asp:Repeater ID="repeatOzellik" runat="server">
<HeaderTemplate><ul class="listeOzellik"></HeaderTemplate>
<ItemTemplate>
<li><i class="fa fa-circle"></i><span class="siyah14"><%#Eval("OzellikAd") %></span></li>
</ItemTemplate>
<FooterTemplate></ul></FooterTemplate>
</asp:Repeater>
</td>
<td style="text-align:center;"><%#Eval("KisiKapasite") %> Kişi</td>
<td><%#Eval("KisaBilgi").ToString().Length>130 ? ""+Eval("KisaBilgi").ToString().Substring(0,130)+"..." : ""+Eval("KisaBilgi")+"" %></td>
<td style="text-align:center;"><span class="turuncu17"><%#Eval("Fiyat") %> <%#Eval("ParaTipi") %></span></td>
<td>
<asp:LinkButton ID="btnRezervasyonYap" runat="server" CssClass="buton turuncu">Rezervasyon Yap</asp:LinkButton></td>
</tr>
</ItemTemplate>
</asp:ListView>
</table>
Kod tarafı:
Dıştaki kontrol normal şekilde doldurulur.
İçteki Repeater ise dıştaki kontrolün ItemDataBound olayında aşağıdaki şekilde doldurulur.
protected void lvListe_ItemDataBound(object sender, ListViewItemEventArgs e)
{
try
{
odaTipId = DataBinder.Eval(e.Item.DataItem, "OdaTipId").ToString(); //Dıştaki kontrolden OdaTipId isimli alanın değerini aldık.
VeriMsSQL.Islem islem = new VeriMsSQL.Islem();
DataTable dt = islem.OzellikOdaListe(odaTipId);
if (dt.Rows.Count > 0)
{
Repeater repeatOdaOzellik = e.Item.FindControl("repeatOzellik") as Repeater;
repeatOdaOzellik.DataSource = dt;
repeatOdaOzellik.DataBind();
}
dt.Dispose();
}
catch (Exception)
{
}
}