Master-Detail GridView in Single Page : TemplateField « Data Binding « ASP.Net






Master-Detail GridView in Single Page


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="MasterDetailsSinglePage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:GridView id="gridMaster" 
                  runat="server" 
                  GridLines="None" 
          AutoGenerateColumns="False" 
          DataKeyNames="CategoryID" 
          DataSourceID="sourceCategories" 
          OnRowDataBound="gridMaster_RowDataBound">
        <AlternatingRowStyle BackColor="PaleGoldenrod"></AlternatingRowStyle>
        <HeaderStyle Font-Bold="True" BackColor="Tan"></HeaderStyle>
        <FooterStyle BackColor="Tan"></FooterStyle>
        <Columns>
          <asp:TemplateField HeaderText="Category">
            <ItemStyle  VerticalAlign="Top" Width="20%"></ItemStyle>
            <ItemTemplate>
              <br><b><%# Eval("CategoryName") %></b><br>
              <br><%# Eval("Description" ) %><br>
            </ItemTemplate>
          </asp:TemplateField>
          <asp:TemplateField HeaderText="Products">
            <ItemStyle VerticalAlign="Top"></ItemStyle>
            <ItemTemplate>
              <asp:GridView id="DataGrid2" 
                            runat="server" 
                            AutoGenerateColumns="False"
                          BorderStyle="None">
                    <RowStyle ForeColor="#330099" BackColor="White"></RowStyle>
                <HeaderStyle Font-Bold="True" ForeColor="#FFFFCC" BackColor="#990000"></HeaderStyle>
                <Columns>
                  <asp:BoundField DataField="ProductName" HeaderText="Product Name">
                  <ItemStyle Width="250px" />
                  </asp:BoundField>
                  <asp:BoundField DataField="UnitPrice" HeaderText="Unit Price" DataFormatString="{0:C}" />
                </Columns>    
              </asp:GridView>
            </ItemTemplate>
          </asp:TemplateField>
        </Columns>
        <PagerStyle HorizontalAlign="Center" ForeColor="DarkSlateBlue" BackColor="PaleGoldenrod"></PagerStyle>
      </asp:GridView>
        <asp:SqlDataSource ID="sourceCategories" 
                           runat="server" 
                           ConnectionString="<%$ ConnectionStrings:Northwind %>"
                           ProviderName="System.Data.SqlClient" 
                           SelectCommand="SELECT * FROM Categories"/>
        <asp:SqlDataSource ID="sourceProducts" 
                           runat="server" 
                           ConnectionString="<%$ ConnectionStrings:Northwind %>"
                           ProviderName="System.Data.SqlClient" 
                           SelectCommand="SELECT * FROM Products WHERE CategoryID=@CategoryID">
            <SelectParameters>
                <asp:Parameter Name="CategoryID" Type="Int32" />
            </SelectParameters>
        </asp:SqlDataSource>
    </div>
    </form>
</body>
</html>

File: Default.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class MasterDetailsSinglePage : System.Web.UI.Page
{
  protected void gridMaster_RowDataBound(object sender, GridViewRowEventArgs e)
  {
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
      GridView gridChild = (GridView)e.Row.Cells[1].Controls[1];

      sourceProducts.SelectParameters[0].DefaultValue = gridMaster.DataKeys[e.Row.DataItemIndex].Value.ToString();
      object data = sourceProducts.Select(DataSourceSelectArguments.Empty);
      
      gridChild.DataSource = data;
      gridChild.DataBind();
    }
  }
}

 








Related examples in the same category

1.Editing Data using Templated Columns
2.Displaying Column Summaries
3.Displaying Nested Master/Details Forms
4.GridView with Template and backend code
5.Using Templated Columns with GridView