por Cesar Cassiano Schimanco

Nested Repeater com 3 níveis em ASP.NET - C#

Criar um Repeater com 2 níveis é simples, mas criar um Repeater com 3 níveis pode dar muita dor de cabeça apesar de terem a mesma idéia.
Abaixo criei um exemplo bem simples de um repeater com categorias, subcategorias e produtos.
Criei 3 tabelas e relacionei elas com o Relations do DataSet.

Default.aspx

<!-- Primeiro repeater-->
<asp:repeater id="repCategoria" runat="server">
    <HeaderTemplate>
        <ul>
    </HeaderTemplate>
    <itemtemplate>
        <li><%# DataBinder.Eval(Container.DataItem, "nomeCategoria")%>
            <ul>
                <!-- Segundo repeater-->
                <asp:repeater id="repSubCategoria" runat="server"
                    DataSource='<%# DataBinder.Eval(Container.DataItem, "SubCategorias") %>'>
                    <itemtemplate>
                        <li><%# DataBinder.Eval(Container.DataItem, "[\"nomeSubCategoria\"]")%>
                            <ul>
                            <!-- Terceiro repeater-->
                            <asp:repeater id="repProdutos" runat="server" 
                                DataSource='<%# DataBinder.Eval(Container.DataItem, "Produtos") %>'>
                                <itemtemplate>
                                    <li>
                                    <%# DataBinder.Eval(Container.DataItem, "[\"nomeProduto\"]")%>
                                    </li>
                                </itemtemplate>
                            </asp:repeater>
                            <!-- /Terceiro repeater-->
                            </ul>
                        </li>
                    </itemtemplate>
                </asp:repeater>
                <!-- /Segundo repeater-->
            </ul>
        </li>
    </itemtemplate>
    <FooterTemplate>
        </ul>
    </FooterTemplate>
</asp:repeater>
<!-- /Primeiro repeater-->

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string sConnectionstring = "Server=.;Database=DataBase;User ID=user;Password=pass;;";

        string sSQL = @"SELECT idCategoria, nomeCategoria 
                        FROM categorias;
                        SELECT idCategoria, idSubCategoria, nomeSubCategoria 
                        FROM subCategorias;
                        SELECT idProduro, idCategoria, idSubCategoria, nomeProduto
                        FROM produtos";

        SqlConnection conn = new SqlConnection(sConnectionstring);
        SqlDataAdapter da = new SqlDataAdapter(sSQL, conn);
       

        DataSet ds = new DataSet();
        da.Fill(ds);

        ds.Tables[0].TableName = "tblCategorias";
        ds.Tables[1].TableName = "tblSubCategoria";
        ds.Tables[2].TableName = "tblProduto";

        //Relação para o segundo repeater (SubCategorias)
        ds.Relations.Add("SubCategorias",
              ds.Tables["tblCategorias"].Columns["idCategoria"],
              ds.Tables["tblSubCategoria"].Columns["idCategoria"]);
        ds.Relations[0].Nested = true;

        //Relação para o terceiro repeater (Produtos)
        ds.Relations.Add("Produtos",
              ds.Tables["tblSubCategoria"].Columns["idSubCategoria"],
              ds.Tables["tblProduto"].Columns["idSubCategoria"]);
        ds.Relations[1].Nested = true;

        //Carrega o primeiro Repeater
        repCategoria.DataSource = ds.Tables["tblCategorias"];
        repCategoria.DataBind();
    }
}

 

Comentários

Carregando comentários

Postar um novo comentário



Processando...