Listview within Listview or Repeat within Repeat?

0

I need to display some products divided by category, the categories are created by the user and both come from the database TB_CATEGORIA, TB_PRODUTOS, how can I do with Listview, Repeat ? For example:

  

Specials

     

Product 1   Product 2

     

Books

     

Book 1   Book 2

     

Old

     

Product1 Product2

    
asked by anonymous 25.03.2014 / 01:18

2 answers

1

Aspx:

<form id="form1" runat="server">
    <asp:Repeater ID="rptCategorias" runat="server">
        <ItemTemplate>
            <asp:Label ID="lblCategoria" runat="server" Text='<%# Bind("Nome") %>'></asp:Label><br />
            <asp:Repeater ID="rptProdutos" runat="server">
                <ItemTemplate>
                    <asp:Label ID="lblProduto" runat="server" Text='<%# Bind("Nome") %>'></asp:Label>
                </ItemTemplate>
            </asp:Repeater>
            <br />
            <br />
        </ItemTemplate>
    </asp:Repeater>
</form>

Aspx.cs:

public partial class _default : Page
{

    private DataSet1 ds = new DataSet1();

    protected void Page_Load(object sender, EventArgs e)
    {
        ds.TB_CATEGORIA.AddTB_CATEGORIARow(1, "Especiais");
        ds.TB_PRODUTOS.AddTB_PRODUTOSRow(1, ds.TB_CATEGORIA.FindById(1), "Produto 1");
        ds.TB_PRODUTOS.AddTB_PRODUTOSRow(2, ds.TB_CATEGORIA.FindById(1), "Produto 2");

        ds.TB_CATEGORIA.AddTB_CATEGORIARow(2, "Livros");
        ds.TB_PRODUTOS.AddTB_PRODUTOSRow(3, ds.TB_CATEGORIA.FindById(2), "Livro 1");
        ds.TB_PRODUTOS.AddTB_PRODUTOSRow(4, ds.TB_CATEGORIA.FindById(2), "Livro 2");

        ds.TB_CATEGORIA.AddTB_CATEGORIARow(3, "Antigos");
        ds.TB_PRODUTOS.AddTB_PRODUTOSRow(5, ds.TB_CATEGORIA.FindById(3), "Antigos 1");
        ds.TB_PRODUTOS.AddTB_PRODUTOSRow(6, ds.TB_CATEGORIA.FindById(3), "Antigos 2");

        rptCategorias.DataSource = ds;
        rptCategorias.DataMember = "TB_CATEGORIA";
        rptCategorias.ItemDataBound += rptCategorias_ItemDataBound;
        rptCategorias.DataBind();
    }

    protected void rptCategorias_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            var rptProdutos = (Repeater)e.Item.FindControl("rptProdutos");
            var row = ((DataRowView) e.Item.DataItem).Row;

            rptProdutos.DataSource = row.GetChildRows(ds.Relations["TB_CATEGORIA_TB_PRODUTOS"]);
            rptProdutos.DataBind();
        }
    }

}
    
25.03.2014 / 15:46
0

In aspx, include within ItemTemplate

<asp:LinkButton runat="server" ID="btnEdit" CommandName="Edit" 
CommandArgument='<%# Bind("Id") %>' Text="Add"></asp:LinkButton>

In codebehind, include in the event rptCategorias_ItemDataBound

rptProdutos.ItemCommand += rptProdutos_ItemCommand;

Create the event

private void rptProdutos_ItemCommand(object source, RepeaterCommandEventArgs e)
{
    switch (e.CommandName)
    {
        case "Edit":
            // Your code
            break;
    }
}
    
09.04.2014 / 20:13