Hi ucrhlyn,
Check the below sample.
Database
I am make use of Customers and Orders Table of Microsofts Northwind Database which you can easily download using the link provided below.
Download Northwind Database
Namespaces
C#
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
VB.Net
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient
HTML
<asp:Repeater ID="rptCustomers" runat="server" OnItemDataBound="OnItemDataBound">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>Contact Name:
<asp:Label ID="lblContactName" runat="server" Font-Bold="true" Text='<%# Eval("ContactName") %>' />
<asp:Repeater ID="rptOrders" runat="server">
<HeaderTemplate>
<table>
<tr>
<th>Order Id</th>
<th>Date</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:Label ID="lblOrderId" runat="server" Text='<%# Eval("OrderId") %>' /></td>
<td><asp:Label ID="lblOrderDate" runat="server" Text='<%# Eval("OrderDate","{0:dd/MM/yyyy}") %>' /></td>
</tr>
</ItemTemplate>
<FooterTemplate>
<tr>
<td colspan="2">
<b><asp:Label runat="server" ID="lblTotal"></asp:Label>Records</b></td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
<asp:HiddenField ID="hfCustomerId" runat="server" Value='<%# Eval("CustomerId") %>' />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
rptCustomers.DataSource = GetData("SELECT TOP 3 CustomerId,ContactName FROM Customers");
rptCustomers.DataBind();
}
}
protected void OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string customerId = (e.Item.FindControl("hfCustomerId") as HiddenField).Value;
Repeater rptOrders = e.Item.FindControl("rptOrders") as Repeater;
DataTable dtOrders = GetData(string.Format("SELECT OrderId,OrderDate FROM Orders WHERE CustomerId='{0}'", customerId));
rptOrders.DataSource = dtOrders;
rptOrders.DataBind();
Control footerTemplate = rptOrders.Controls[rptOrders.Controls.Count - 1].Controls[0];
(footerTemplate.FindControl("lblTotal") as Label).Text = dtOrders.Rows.Count.ToString();
}
}
private DataTable GetData(string query)
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = query;
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
}
}
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
rptCustomers.DataSource = GetData("SELECT TOP 3 CustomerId,ContactName FROM Customers")
rptCustomers.DataBind()
End If
End Sub
Protected Sub OnItemDataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs)
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
Dim customerId As String = (TryCast(e.Item.FindControl("hfCustomerId"), HiddenField)).Value
Dim rptOrders As Repeater = TryCast(e.Item.FindControl("rptOrders"), Repeater)
Dim dtOrders As DataTable = GetData(String.Format("SELECT OrderId,OrderDate FROM Orders WHERE CustomerId='{0}'", customerId))
rptOrders.DataSource = dtOrders
rptOrders.DataBind()
Dim footerTemplate As Control = rptOrders.Controls(rptOrders.Controls.Count - 1).Controls(0)
TryCast(footerTemplate.FindControl("lblTotal"), Label).Text = dtOrders.Rows.Count.ToString()
End If
End Sub
Private Function GetData(ByVal query As String) As DataTable
Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Using con As SqlConnection = New SqlConnection(constr)
Using cmd As SqlCommand = New SqlCommand()
cmd.CommandText = query
Using sda As SqlDataAdapter = New SqlDataAdapter()
cmd.Connection = con
sda.SelectCommand = cmd
Dim dt As DataTable = New DataTable()
sda.Fill(dt)
Return dt
End Using
End Using
End Using
End Function
Screenshot