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();
}
}
}
It is possible to make the infamous "Nested Repeaters" or "Nested Listviews" of life yes, and this will probably solve your problem, but I will confess that putting a Repoter inside the other gave me a huge headache on account of some unfortunate details of their implementation. just write "nested Repeater" in google and you will see and flood of questions related to it (my event does not fire, my data does not load, etc)
– Conrad Clark