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();
}
}
}