Hi ashish007,
Check this example. Now please take its reference and correct your code.
Database
For this example I have used of Northwind database that you can download using the link given below.
Download Northwind Database
HTML
<asp:DataList ID="dlCustomers" runat="server" Width="560px" BorderWidth="1px"
OnItemCommand="dlCustomers_ItemCommand" OnItemDataBound="dlCustomers_ItemDataBound">
<ItemTemplate>
<table>
<tr>
<td>
<asp:Label ID="lblContactName" runat="server" Text='<%# Eval("ContactName") %>' />
<asp:HiddenField ID="hfCustomerId" runat="server" Value='<%# Eval("CustomerId") %>' />
</td>
<td>
<asp:Label ID="lblCity" runat="server" Text='<%# Eval("City") %>' />
</td>
</tr>
<tr>
<td colspan="2">
<asp:DataList ID="dlOrders" runat="server" Width="450px"
OnItemCommand="dlOrders_ItemCommand" OnItemDataBound="dlOrders_ItemDataBound">
<ItemTemplate>
<table>
<tr>
<td>
<asp:Label ID="lblOrderId" runat="server" Text='<%#Bind("OrderId") %>'></asp:Label>
<br />
<asp:Label ID="lblUnitPrice" runat="server" Text='<%#Eval("OrderDate") %>'></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:DataList ID="dlOrderDetails" runat="server">
<ItemTemplate>
<table>
<tr>
<td>
<asp:Label ID="Lfname" runat="server" Font-Names="verdana" Font-Size="8pt" Text='<%#Bind("OrderId") %>'> </asp:Label><br />
<asp:Label ID="Label3" runat="server" Text='<%# Bind("UnitPrice") %>'></asp:Label>
<asp:Button ID="btnReplyChild" runat="server" Text="Reply_Child" CssClass="btnpost"
Style="float: left; margin: 5px;" OnClick="btnReplyChild_Click" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
</td>
</tr>
</table>
<hr />
</ItemTemplate>
</asp:DataList>
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>
Namespaces
C#
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
VB.Net
Imports System.Configuration
Imports System.Data
Imports System.Data.SqlClient
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
dlCustomers.DataSource = GetData("SELECT TOP 3 * FROM Customers");
dlCustomers.DataBind();
}
}
private static 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;
}
}
}
}
protected void dlCustomers_ItemCommand(object source, DataListCommandEventArgs e)
{
}
protected void dlCustomers_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string customerId = (e.Item.FindControl("hfCustomerId") as HiddenField).Value;
DataList dlOrders = e.Item.FindControl("dlOrders") as DataList;
dlOrders.DataSource = GetData(string.Format("SELECT TOP 3 * FROM Orders WHERE CustomerId='{0}'", customerId));
dlOrders.DataBind();
}
}
protected void dlOrders_ItemCommand(object source, DataListCommandEventArgs e)
{
}
protected void dlOrders_ItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string orderId = (e.Item.FindControl("lblOrderId") as Label).Text;
DataList dlOrderDetails = e.Item.FindControl("dlOrderDetails") as DataList;
dlOrderDetails.DataSource = GetData(string.Format("SELECT TOP 3 * FROM [Order Details] WHERE OrderId='{0}'", orderId));
dlOrderDetails.DataBind();
}
}
protected void btnReplyChild_Click(object sender, EventArgs e)
{
DataListItem itemOrderDetails = (sender as Button).NamingContainer as DataListItem;
DataList dlOrders = itemOrderDetails.Parent as DataList;
DataListItem itemOrders = dlOrders.Parent as DataListItem;
Label lblOrder = itemOrders.FindControl("lblOrderId") as Label;
DataList dlCustomers = itemOrders.Parent as DataList;
DataListItem itemCustomers = dlCustomers.Parent as DataListItem;
HiddenField hfCustomer = itemCustomers.FindControl("hfCustomerId") as HiddenField;
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
dlCustomers.DataSource = GetData("SELECT TOP 3 * FROM Customers")
dlCustomers.DataBind()
End If
End Sub
Private Shared 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
Protected Sub dlCustomers_ItemCommand(ByVal source As Object, ByVal e As DataListCommandEventArgs)
End Sub
Protected Sub dlCustomers_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs)
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 dlOrders As DataList = TryCast(e.Item.FindControl("dlOrders"), DataList)
dlOrders.DataSource = GetData(String.Format("SELECT TOP 3 * FROM Orders WHERE CustomerId='{0}'", customerId))
dlOrders.DataBind()
End If
End Sub
Protected Sub dlOrders_ItemCommand(ByVal source As Object, ByVal e As DataListCommandEventArgs)
End Sub
Protected Sub dlOrders_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs)
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
Dim orderId As String = (TryCast(e.Item.FindControl("lblOrderId"), Label)).Text
Dim dlOrderDetails As DataList = TryCast(e.Item.FindControl("dlOrderDetails"), DataList)
dlOrderDetails.DataSource = GetData(String.Format("SELECT TOP 3 * FROM [Order Details] WHERE OrderId='{0}'", orderId))
dlOrderDetails.DataBind()
End If
End Sub
Protected Sub btnReplyChild_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim itemOrderDetails As DataListItem = TryCast((TryCast(sender, Button)).NamingContainer, DataListItem)
Dim dlOrders As DataList = TryCast(itemOrderDetails.Parent, DataList)
Dim itemOrders As DataListItem = TryCast(dlOrders.Parent, DataListItem)
Dim lblOrder As Label = TryCast(itemOrders.FindControl("lblOrderId"), Label)
Dim dlCustomers As DataList = TryCast(itemOrders.Parent, DataList)
Dim itemCustomers As DataListItem = TryCast(dlCustomers.Parent, DataListItem)
Dim hfCustomer As HiddenField = TryCast(itemCustomers.FindControl("hfCustomerId"), HiddenField)
End Sub