Skip to main content

Nested GridView in ASP.NET Using c# with show/hide


In This example shows how to create Nested GridView In Asp.Net Using C# And VB.NET With Expand Collapse Functionality.

Sending Email from Asp.net With Dynamic Content , SQL Server- Case Sensitive Search in SQL Server


I have used JavaScript to Create Expandable Collapsible Effect by displaying Plus Minus image buttons.

Nested GridView Example In Asp.Net With Expand Collapse

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>
Write following code in RowDataBound Event of parent Grid to populate nested gridview.

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

Popular posts from this blog

Asp.Net AjaxFileUpload Control With Drag Drop And Progress Bar

This Example explains how to use AjaxFileUpload Control With Drag Drop And Progress Bar Functionality In Asp.Net 2.0 3.5 4.0 C# And VB.NET. Previous Post  I was Explained about the   jQuery - Allow Alphanumeric (Alphabets & Numbers) Characters in Textbox using JavaScript  ,  Fileupload show selected file in label when file selected  ,  Check for file size with JavaScript before uploading  . May 2012 release of AjaxControlToolkit includes a new AjaxFileUpload Control  which supports Multiple File Upload, Progress Bar and Drag And Drop functionality. These new features are supported by Google Chrome version 16+, Firefox 8+ , Safari 5+ and Internet explorer 10 + , IE9 or earlier does not support this feature. To start with it, download and put latest AjaxControlToolkit.dll in Bin folder of application, Place ToolkitScriptManager  and AjaxFileUpload on the page. HTML SOURCE < asp:ToolkitScriptManager I...

Check dot net core framework version in my PC Or System

 Open My Computer → double click "C:" drive → double click "Windows" → double click "Microsoft.NET" → double click "Framework" → Inside this folder, there will be folder(s) like "v1.0.3705" and/or "v2.0.50727" and/or "v3.5" and/or "v4.0.30319". Your latest .NET version would be in the highest v number folder, so if v4.0.30319 is available that would hold your latest .NET framework. However, the v4.0.30319 does not mean that you have the .NET framework version 4.0. The v4.0.30319 is your Visual C# compiler version, therefore, in order to find the .NET framework version do the following. Go to a command prompt and follow this path: C:\Windows\Microsoft.NET\Framework\v4.0.30319 (or whatever the highest v number folder) C:\Windows\Microsoft.NET\Framework\v4.0.30319 > csc.exe Output: Microsoft (R) Visual C# Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5 Copyright (C) Microsoft Corporati...

ASP.NET Routing

ASP.NET routing enables you to use URLs that do not have to map to specific files in a Web site. Because the URL does not have to map to a file, you can use URLs that are descriptive of the user's action and therefore are more easily understood by users. The ASP.NET MVC framework and ASP.NET Dynamic Data extend routing to provide features that are used only in MVC applications and in Dynamic Data applications. For more information about MVC, see ASP.NET MVC 3 . For more information about Dynamic Data, see ASP.NET Dynamic Data Content Map . In an ASP.NET application that does not use routing, an incoming request for a URL typically maps to a physical file that handles the request, such as an .aspx file. For example, a request for http://server/application/Products.aspx?id=4 maps to a file that is named Products.aspx that contains code and markup for rendering a response to the browser. The Web page uses the query string value of id=4 to determine what type of c...