Hi panilkumar,
Check this example. Now please take its reference and correct your code.
HTML
<asp:DataGrid ID="dgCustomers" runat="server" AutoGenerateColumns="false" OnItemDataBound="gvCustomers_ItemDataBound"
DataKeyField="CustomerId">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<img alt="" style="cursor: pointer" src="images/plus.png" />
<asp:Panel ID="pnlOrders" runat="server" Style="display: none">
<asp:DataGrid ID="dgOrders" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundColumn HeaderText="Order Id" DataField="OrderId"></asp:BoundColumn>
<asp:BoundColumn HeaderText="Order Date" DataField="OrderDate" DataFormatString="{0:dd-MM-yyyy}">
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
</asp:Panel>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn HeaderText="Name" DataField="ContactName"></asp:BoundColumn>
<asp:BoundColumn HeaderText="City" DataField="City"></asp:BoundColumn>
</Columns>
</asp:DataGrid>
</div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$("[src*=plus]").live("click", function () {
$(this).closest("tr").after("<tr><td></td><td colspan = '999'>" + $(this).next().html() + "</td></tr>")
$(this).attr("src", "images/minus.png");
});
$("[src*=minus]").live("click", function () {
$(this).attr("src", "images/plus.png");
$(this).closest("tr").next().remove();
});
</script>
Namespaces
C#
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
VB.Net
Imports System.Data.SqlClient
Imports System.Data
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
dgCustomers.DataSource = GetData("SELECT TOP 5 CustomerId,ContactName,City FROM Customers");
dgCustomers.DataBind();
}
}
private static DataTable GetData(string query)
{
string strConnString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
using (SqlConnection con = new SqlConnection(strConnString))
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.CommandText = query;
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
sda.SelectCommand = cmd;
using (DataSet ds = new DataSet())
{
DataTable dt = new DataTable();
sda.Fill(dt);
return dt;
}
}
}
}
}
protected void gvCustomers_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
string customerId = dgCustomers.DataKeys[e.Item.ItemIndex].ToString();
DataGrid dgOrders = e.Item.FindControl("dgOrders") as DataGrid;
dgOrders.DataSource = GetData(string.Format("SELECT TOP 3 OrderId,OrderDate FROM Orders WHERE CustomerId='{0}'", customerId));
dgOrders.DataBind();
}
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not IsPostBack Then
dgCustomers.DataSource = GetData("SELECT TOP 5 CustomerId,ContactName,City FROM Customers")
dgCustomers.DataBind()
End If
End Sub
Private Shared Function GetData(ByVal query As String) As DataTable
Dim strConnString As String = ConfigurationManager.ConnectionStrings("ConString").ConnectionString
Using con As SqlConnection = New SqlConnection(strConnString)
Using cmd As SqlCommand = New SqlCommand()
cmd.CommandText = query
Using sda As SqlDataAdapter = New SqlDataAdapter()
cmd.Connection = con
sda.SelectCommand = cmd
Using ds As DataSet = New DataSet()
Dim dt As DataTable = New DataTable()
sda.Fill(dt)
Return dt
End Using
End Using
End Using
End Using
End Function
Protected Sub gvCustomers_ItemDataBound(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
Dim customerId As String = dgCustomers.DataKeys(e.Item.ItemIndex).ToString()
Dim dgOrders As DataGrid = TryCast(e.Item.FindControl("dgOrders"), DataGrid)
dgOrders.DataSource = GetData(String.Format("SELECT TOP 3 OrderId,OrderDate FROM Orders WHERE CustomerId='{0}'", customerId))
dgOrders.DataBind()
End If
End Sub
Screenshot
