İç İçe (Nested) Repeater Kullanımı

Eyl 06, 2013

İç İçe Repeater, Repeater kontrolü ile veritabanından çekilen verilerin alt başlıklarını eklemek ve bu eklenen başlıkların da veritabanından gelmesi istenildiğinde kullanılır.

Uygulama 

Uygulamada iller ve bu illere bağlı ilçeler İç İçe Repeater kullanılarak gösterilmiştir. Burada hem iller hem de ilçeler veritabanında tablolar halinde saklanmış ve birbirleriyle ilişkilendirilmiştir. Ayrıca veritabanı bağlantısı için ise Entity kullanılmıştır. Öncelikle, .aspx uzantılı sayfada gereken tablolar ve "repeater"lar oluşturulur. Burada ikinci kullanılan repeater birincinin <ItemTemplate> etiketi içinde tanımlanmıştır.

            <asp:Repeater ID="rpIl" runat="server" OnItemDataBound="rpIlItemDataBound" >

                <HeaderTemplate>

                   <table>

                        <tr>

                            <th colspan="2">İl Adı</th>

                        </tr>

                </HeaderTemplate>

                <ItemTemplate>

                    <tr>

                        <td valign="top">

                        <%# Eval("ad") %>

                        </td>            

                        <td>

                            <asp:Repeater ID="rpIlce" runat="server">

                                <HeaderTemplate>

                                    <table>

                                </HeaderTemplate>                       

                                <ItemTemplate>

                                    <tr>

                                        <td><%# Eval("ad") %></td>

                                    </tr>

                                </ItemTemplate>

                                <FooterTemplate>

                                    </table>

                                </FooterTemplate>

                            </asp:Repeater>

                        </td>

                    </tr>

                </ItemTemplate>

                <FooterTemplate>

                    </table>

                </FooterTemplate>

            </asp:Repeater>

 

Arka kısımda çalışacak kod aşağıdaki gibidir:

  • İlk olarak İl tablosundan İl adları repeatera bağlanır.

        rpIl.DataSource = RE.GetIl();

        rpIl.DataBind();

      Burada kullanılan "RE" Entity, GetIl() ise Entity altındaki bir metoddur. GetIl() metodu aşağıdaki gibidir:

     

        public List<Il> GetIl()

        {

            var q = from o in Il

                    where o.silindi == false

                    select o;

            return q.ToList();

        }

  • Daha sonra İlçe tablosundan ilçe adları illere bağlı olarak ikinci repeatera bağlanır. Burada ilçeye ait repeater tanımlanırken İl repeaterının "ItemDataBound"event(olay)'i kullanılmıştır.

        protected void rpIlItemDataBound(object sender, RepeaterItemEventArgs e)

        {

            if (e.Item.ItemType == ListItemType.Item ||                                                                                          e.Item.ItemType == ListItemType.AlternatingItem)

            {

                Il a = (Il)e.Item.DataItem;

                Repeater rpIlce = (Repeater)e.Item.FindControl("rpIlce");

                rpIlce.DataSource = RE.GetIlceByIlId(a.id);

                rpIlce.DataBind();

            }

        }

 

      Burada kullanılan GetIlceByIlId() metodu aşağıdaki gibidir:

 

        public List<Ilce> GetIlceByIlId(Guid ilId)

        {

            var q = from o in Ilce

                    where o.ilId == ilId & o.silindi == false

                    select o;

            return q.ToList();

        }

 

Uygulamanın çıktısı aşağıdaki gibidir: