GridView inside GridView in ASP.Net-- C# (Nested GridView)
Here I am focusing on how we can use GridView inside GridView i.e nested 
        gridview. Let’s see the brief demonstraton on use of nested gridview.
Step 1: Open Visual Studio and select new project from File menu and select 
        website.
Step 2: After create successful new project drag gridview from toolbox and drop 
        it on web page where you want.
After successfully drag gridview on the page you can perform many tasks such as 
        you can edit format of gridview , edit columns and many more.
 
 
Here when you click on the Auto Format then following window will be appear 
        where you have more choice like
    

Now when you click on edit columns then following window will be appear where 
        you can add different types of fields

Here I am adding three template field.
  Step 3:  Now for performing nested gridview or 
        gridview inside gridview you can write the following code.
        <%-- 
        Parent gridview --%>
                
        <asp:GridView 
        ID="GridView1" 
        runat="server" 
        AutoGenerateColumns="False"
        
        
        
    
                   
        
        CellPadding="4" 
        
        EnableModelValidation="True"
        
        
        
    
                   
        
        ForeColor="#333333" 
        GridLines="None" 
        onrowcommand="GridView1_RowCommand" 
        onrowcancelingedit="GridView1_RowCancelingEdit"
        
        
        
    
                   
        
        >
                   
        
        <AlternatingRowStyle 
        BackColor="White" 
        />
                   
        
        <Columns>
                       
        
        <asp:TemplateField 
        HeaderText="Department_Id">
                           
        
        <EditItemTemplate>
                               
        
        <asp:TextBox 
        ID="TextBox1" 
        runat="server" 
        Text='<%# Bind("did")
        
        
        %>'>asp:TextBox>
                           
        
        EditItemTemplate>
                           
        
        <ItemTemplate>
                               
        
        <asp:Label 
        ID="Label1" 
        runat="server" 
        Text='<%# Bind("did")
        
        
        %>'>asp:Label>
                           
        
        ItemTemplate>
                       
        
        asp:TemplateField>
                       
        
        <asp:TemplateField 
        HeaderText="Department_Name">
                           
        
        <EditItemTemplate>
                               
        
        <asp:TextBox 
        ID="TextBox2" 
        runat="server" 
        Text='<%# 
        Bind("department") 
        
        %>'>asp:TextBox>
                           
        
        EditItemTemplate>
                           
        
        <ItemTemplate>
                               
        
        <asp:Label 
        ID="Label2" 
        runat="server" 
        Text='<%# 
        Bind("department") 
        
        %>'>asp:Label>
                           
        
        ItemTemplate>
                       
        
        asp:TemplateField>
                       
        
        <asp:TemplateField 
        HeaderText 
        = 
        "Details">
                            
        
        <ItemTemplate>
                              
        
        <asp:Button 
        ID 
        ="btn_Show" 
        Text="Details" 
        runat= 
        "server" 
        CommandName= 
        "Details" 
        CommandArgument='<%# 
        Container.DataItemIndex%>' 
        />
                              
        
        <asp:Button 
        ID 
        ="Cancel" 
        Text="Cancel" 
        runat= 
        "server" 
        CommandName= 
        "Cancel" 
        CommandArgument='<%# 
        Container.DataItemIndex%>' 
        Visible="false" 
        />
                            
        
        
        <%--child gridview with bound fields --%>
                              
        
        <asp:GridView 
        ID="GridView2" 
        runat="server" 
        AutoGenerateColumns="False"
        
        
        
    
                    
        
        CellPadding="4" 
        
        EnableModelValidation="True"
        
        
        
    
                   
        
        ForeColor="#000000" 
        GridLines="Both">
                               
        
        <Columns>
                                 
        
        <asp:BoundField 
        DataField="Emp_Id" 
        HeaderText= 
        "Emp_Id" 
        >
                                 
        
        <ItemStyle 
        Width 
        = 
        "20%" 
        />
                                 
        
        asp:BoundField>
                                 
        
        <asp:BoundField 
        DataField="Dep_Name" 
        HeaderText= 
        "Dep_Name" 
        >
                                 
        
        <ItemStyle 
        Width 
        = 
        "20%" 
        />
                                 
        
        asp:BoundField>
                                 
        
        <asp:BoundField 
        DataField="Name" 
        HeaderText= 
        "Name" 
        >
                                 
        
        <ItemStyle 
        Width 
        = 
        "20%" 
        />
                                 
        
        asp:BoundField>
                                 
        
        <asp:BoundField 
        DataField="Address" 
        HeaderText= 
        "Address" 
        >
                                 
        
        <ItemStyle 
        Width 
        = 
        "20%" 
        />
                                 
        
        asp:BoundField>
                                 
        
        <asp:BoundField 
        DataField="Department" 
        HeaderText= 
        "Department" 
        >
                                 
        
        <ItemStyle 
        Width 
        = 
        "20%" 
        />
                                 
        
        asp:BoundField>
                                 
        
        <asp:BoundField 
        DataField="Designation" 
        HeaderText= 
        "Designation" 
        >
                                 
        
        <ItemStyle 
        Width 
        = 
        "20%" 
        />
                                 
        
        asp:BoundField>
                                 
        
        <asp:BoundField 
        DataField="Technology" 
        HeaderText= 
        "Technology" 
        >
                                 
        
        <ItemStyle 
        Width 
        = 
        "20%" 
        />
                                 
        
        asp:BoundField>
                                
        
        Columns>
                                
        
        <EditRowStyle 
        BackColor="#7C6F57" 
        />
                   
        
        <FooterStyle 
        BackColor="#1C5E55" 
        Font-Bold="True" 
        ForeColor="White" 
        />
                   
        
        <HeaderStyle 
        BackColor="#1C5E55" 
        Font-Bold="True" 
        ForeColor="White" 
        />
                   
        
        <PagerStyle 
        BackColor="#666666" 
        ForeColor="White" 
        HorizontalAlign="Center" 
        />
                   
        
        <RowStyle 
        BackColor="#E3EAEB" 
        />
                   
        
        <SelectedRowStyle 
        BackColor="#C5BBAF" 
        Font-Bold="True" 
        ForeColor="#333333" 
        />
                               
        
        asp:GridView>
                           
        
        ItemTemplate>
                       
        
        asp:TemplateField>
                   
        
        Columns>
                   
        
        <EditRowStyle 
        BackColor="#7C6F57" 
        />
                   
        
        <FooterStyle 
        BackColor="#1C5E55" 
        Font-Bold="True" 
        ForeColor="White" 
        />
                   
        
        <HeaderStyle 
        BackColor="#1C5E55" 
        Font-Bold="True" 
        ForeColor="White" 
        />
                   
        
        <PagerStyle 
        BackColor="#666666" 
        ForeColor="White" 
        HorizontalAlign="Center" 
        />
                   
        
        <RowStyle 
        BackColor="#E3EAEB" 
        />
                   
        
        <SelectedRowStyle 
        BackColor="#C5BBAF" 
        Font-Bold="True" 
        ForeColor="#333333" 
        />
                
        asp:GridView>
The Deisgn of GridView as follows
    

After the design is complete write the following code in .cs file.
public 
        partial 
        class 
        _Default :
        System.Web.UI.Page
        
        
        
    
{
            
        protected 
        void 
        Page_Load(object sender, 
        EventArgs e)
            {
                
        if (!IsPostBack)
                
        {
                   
        
        ///// bind data with parent gridview when page 
        first time loaded
                   
        
        SqlConnection 
        con = 
        new 
        SqlConnection(ConnectionString.ConnString());
                   
        con.Open();
                   
        
        SqlDataAdapter 
        da = 
        new 
        SqlDataAdapter();
                   
        da.SelectCommand = 
        new SqlCommand("select did , Department from tblDepartment",
        con);
                   
        
        DataSet 
        ds = 
        new DataSet();
                   
        da.Fill(ds);
                   
        GridView1.DataSource = ds;
                   
        GridView1.DataBind();
                
        }
            }
            
        /// 
        
            
        /// This event raised 
        when button clicked within GridView 
        
        
        
        
    
            
        /// 
        
            
        protected 
        void 
        GridView1_RowCommand(object sender, 
        GridViewCommandEventArgs e)
            {
                
        /// takes the command argument row index 
        
        
        
        
    
                
        int rowindex = Convert.ToInt32(e.CommandArgument.ToString());
                
        //// find child gridview control 
        
        
        
        
    
                
        GridView 
        grv = (GridView)GridView1.Rows[rowindex].FindControl("GridView2");
                
        ////  text 
        for which details display 
        
        
        
        
    
                
        Label lbl=  (Label) GridView1.Rows[rowindex].FindControl("Label2");
                
        GridView1.Rows[rowindex].FindControl("Cancel").Visible = 
        false;
        
        
        
    
                
        //// 
        
        
        
        
    
                
        if (e.CommandName == "Details")
                
        {
                   
        GridView1.Rows[rowindex].FindControl("Cancel").Visible = 
        true; 
        
        
        
        
    
                   
        GridView1.Rows[rowindex].FindControl("btn_Show").Visible = 
        false;   
        
        
        
        
    
                   
        
        SqlConnection 
        con = 
        new 
        SqlConnection(ConnectionString.ConnString());
                   
        con.Open();
                   
        
        SqlDataAdapter 
        da = 
        new 
        SqlDataAdapter();
                   
        
        DataSet 
        ds = 
        new DataSet();
                   
        
        if (lbl.Text == "HR Department")
                   
        {
                       
        
        da.SelectCommand = new 
        SqlCommand("Select * from tblHR", con);
                       
        da.Fill(ds);
                   
        }
                   
        
        else 
        if (lbl.Text == "Sales Department")
                   
        {
                       
        
        da.SelectCommand = new 
        SqlCommand("Select * from tblSales", con);
                       
        da.Fill(ds);
                   
        }
                   
        
        else
                    {
                       
        
        da.SelectCommand = new 
        SqlCommand("Select * from tblTechnical", con);
                       
        da.Fill(ds);
                   
        }
                   
        
        ////// bind data with child gridview 
        
        
        
        
    
                   
        grv.DataSource = ds;
                   
        grv.DataBind();
                   
        grv.Visible = true;
                
        }
                
        else
                
        {
                   
        
        //// child gridview  display false when cancel button 
        raise event
                   
        grv.Visible = false;
                   
        GridView1.Rows[rowindex].FindControl("btn_Show").Visible = 
        true;
                
        }
            }
            
        /// 
        
            
        /// row cancel event 
        when clicked on cancel button
            
        /// 
        
            
        protected 
        void 
        GridView1_RowCancelingEdit(object sender, 
        GridViewCancelEditEventArgs e)
            {
            }
}
When you debug this code and click on details button then output will be
    

If want see all details of column Department_Name then you can see after 
        clicking all details button.

Conclusion:
Here we are taking two gridview control first is parent gridview and second one 
        is child gridview control. Parent gridview control contain three category HR 
        department, Technical department and sales department, and all the category have 
        some information which are showing in child gridview control when click on 
        Details button.
Working with GridView control in Windows Forms
ReplyDelete