Previous post I was Explained about the ASP.NET e-Commerce website GridView with Product Listing , How To Export gridview data to Excel/PDF , CSV Formates in asp.net C#,
Sending Email from Asp.net With Dynamic Content , SQL Server- Case Sensitive Search in SQL Server
Customers and Orders Table of Northwind Database are used to populate nested GridViews.
Drag and place SqlDataSource from toolbox on aspx page and configure and choose it as datasource from smart tags
Go to HTML source of page and add 2 TemplateField in <Columns>, one as first column and one as last column of gridview.
Place another grid in last templateField column.
Markup of page after adding both templatefields will like as shown below.
HTML SOURCE
<asp:GridView ID="gvMaster" runat="server"
AllowPaging="True"
AutoGenerateColumns="False"
DataKeyNames="CustomerID"
DataSourceID="SqlDataSource1"
onrowdatabound="gvMaster_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<a href="javascript:collapseExpand('customerID-
<%# Eval("CustomerID") %>');">
<img id="imagecustomerID-<%# Eval("CustomerID") %>"
alt="Click to show/hide orders"
border="0" src="plus.png" /></a>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="CustomerID"
HeaderText="CustomerID"/>
<asp:BoundField DataField="CompanyName"
HeaderText="CompanyName"/>
<asp:TemplateField>
<ItemTemplate>
<tr><td colspan="100%">
<div id="customerID-<%# Eval("CustomerID") %>"
style="display:none;
position:relative;left:25px;">
<asp:GridView ID="nestedGridView" runat="server"
AutoGenerateColumns="False"
DataKeyNames="OrderID">
<Columns>
<asp:BoundField DataField="OrderID" HeaderText="OrderID"/>
<asp:BoundField DataField="OrderDate" HeaderText="OrderDate"/>
<asp:BoundField DataField="Freight" HeaderText="Freight"/>
</Columns>
</asp:GridView>
</div>
</td></tr>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT [CustomerID], [CompanyName]
FROM [Customers]">
</asp:SqlDataSource>
Add following JavaScript in head section of page.
<script type=
"text/javascript"
>
function collapseExpand(obj)
{
var gvObject = document.getElementById(obj);
var imageID = document.getElementById(
'image'
+ obj);
if
(gvObject.style.display ==
"none"
)
{
gvObject.style.display =
"inline"
;
imageID.src =
"minus.png"
;
}
else
{
gvObject.style.display =
"none"
;
imageID.src =
"plus.png"
;
}
}
</script>
C#
protected
void
gvMaster_RowDataBound(
object
sender, GridViewRowEventArgs e)
{
if
(e.Row.RowType == DataControlRowType.DataRow)
{
string
customerID = Convert.ToString(DataBinder.Eval(e.Row.DataItem,
"CustomerID"
));
GridView gvChild = (GridView)e.Row.FindControl(
"nestedGridView"
);
SqlDataSource gvChildSource =
new
SqlDataSource();
gvChildSource.ConnectionString = ConfigurationManager.ConnectionStrings[
"ConnectionString"
].ConnectionString;
gvChildSource.SelectCommand =
"SELECT [OrderID], [OrderDate],[Freight] FROM [Orders] WHERE [CustomerID] = '"
+ customerID +
"'"
;
gvChild.DataSource = gvChildSource;
gvChild.DataBind();
}
}
VB.NET
Protected
Sub
gvMaster_RowDataBound(sender
As
Object
, e
As
GridViewRowEventArgs)
If
e.Row.RowType = DataControlRowType.DataRow
Then
Dim
customerID
As
String
= Convert.ToString(DataBinder.Eval(e.Row.DataItem,
"CustomerID"
))
Dim
gvChild
As
GridView =
DirectCast
(e.Row.FindControl(
"nestedGridView"
), GridView)
Dim
gvChildSource
As
New
SqlDataSource()
gvChildSource.ConnectionString = ConfigurationManager.ConnectionStrings(
"ConnectionString"
).ConnectionString
gvChildSource.SelectCommand =
"SELECT [OrderID], [OrderDate],[Freight] FROM [Orders] WHERE [CustomerID] = '"
+ customerID +
"'"
gvChild.DataSource = gvChildSource
gvChild.DataBind()
End
If
End
Sub
I hope this will be helpful for you. I would like to have any feedback from you.
Your valuable feedback, question, or comments about this article are always welcome.
Comments
Post a Comment