Code:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="C#" runat="server">
private DataSet _ds = null;
private DataView _dvCustomerOrders = null;
private void bind()
{
string connString = "user id=sa;password=sa;server=DeathAngel;database=northwind;";
string cmdText = "select * from customers;select * from orders;";
using (SqlConnection cn = new SqlConnection(connString))
using (SqlDataAdapter da = new SqlDataAdapter(cmdText, cn))
{
_ds = new DataSet();
da.Fill(_ds);
_ds.Tables[0].TableName = "Customers";
_ds.Tables[1].TableName = "Orders";
}
_dvCustomerOrders = new DataView(_ds.Tables["Orders"]);
dgCustomers.DataSource = _ds.Tables["Customers"];
dgCustomers.DataBind();
}
public DataView GetOrders(object dataItem)
{
DataRowView drv = dataItem as DataRowView;
if (drv != null)
{
string customerID = drv["CustomerID"].ToString();
string rowFilter = "CustomerID='" + customerID + "'";
_dvCustomerOrders.RowFilter = rowFilter;
}
return _dvCustomerOrders;
}
protected override void OnInit(System.EventArgs e)
{
base.OnInit(e);
if (!Page.IsPostBack)
{
bind();
}
}
</script>
<html>
<body>
<form runat="server">
<asp:DataGrid ID="dgCustomers" Runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="ContactName" HeaderText="Customer"/>
<asp:TemplateColumn HeaderText="Orders">
<ItemTemplate>
<asp:DataGrid
ID="dgCustomerOrders"
Runat="server"
Width="100%"
AutoGenerateColumns="False"
DataSource='<%# GetOrders ( Container.DataItem ) %>'>
<Columns>
<asp:BoundColumn DataField="OrderID" HeaderText="OrderID"/>
<asp:BoundColumn DataField="Freight" HeaderText="Freight"/>
<asp:BoundColumn DataField="RequiredDate" HeaderText="Required Date"/>
<asp:BoundColumn DataField="ShippedDate" HeaderText="Shipped Date"/>
</Columns>
</asp:DataGrid>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</html>