successful in doing this but I need the embedded grid to fire its
ItemDataBound event so I can handle it. The event does not seem to fire for
some reason. The code is below.
Look towards the end of the CustomerDataGri d_OnItemDataBou nd(object sender,
DataGridItemEve ntArgs e) method. This is where I register the event and
place the programmaticall y created grid into the main grid. The registered
event does not cause the OrdersDataGrid_ ItemDataBound to run.
Appreciate anyones help.
Thanks,
Girish
------------
ASPX File
-----------
<%@ Page language="c#" Inherits="Maste rDetail.Custome rOrderDataGrid"
EnableViewState ="False" CodeBehind="Cus tomerOrderDataG rid.aspx.cs"
AutoEventWireup ="false" %>
<HTML>
<body style="FONT: x-small Verdana, Arial, sans-serif">
<!-- Begin Web Form -->
<form id="CustomerOrd erDataGrid" method="post" runat="server">
<p><a href="/DayOfDotNet/">Parent Directory</a></p>
<!-- Begin DataGrid -->
<asp:DataGrid id="CustomerDat aGrid" runat="server"
AutoGenerateCol umns="False" CellPadding="2"
CellSpacing="0" Font-Names="Verdana, Arial, sans-serif"
BorderColor="Bl ack" BorderWidth="1"
GridLines="Hori zontal"
OnItemDataBound ="CustomerDataG rid_OnItemDataB ound" EnableViewState ="False">
<AlternatingIte mStyle BackColor="Tan" ></AlternatingItem Style>
<ItemStyle Font-Size="X-Small"></ItemStyle>
<HeaderStyle Font-Size="Small" Font-Names="Arial" Font-Bold="True"
ForeColor="Whit e" BackColor="Maro on"></HeaderStyle>
<Columns>
<asp:BoundColum n Visible="False"
DataField="Cust omerID"></asp:BoundColumn >
<asp:HyperLinkC olumn
DataTextField=" CustomerID"
DataNavigateUrl Field="Customer ID"
DataNavigateUrl FormatString="O rderDetailDataG rid.aspx?custom erid={0}"
HeaderText="ID"
ItemStyle-VerticalAlign=" Top" />
<asp:TemplateCo lumn HeaderText="Cus tomer">
<ItemStyle VerticalAlign=" Top"></ItemStyle>
<ItemTemplate >
<b>
<%# DataBinder.Eval (Container.Data Item, "CompanyNam e") %>
</b>
<br>
<%# DataBinder.Eval (Container.Data Item, "Address" ) %>
<br>
<%# DataBinder.Eval (Container.Data Item, "City" ) %>
,
<%# DataBinder.Eval (Container.Data Item, "Region") %>
<%# DataBinder.Eval (Container.Data Item, "PostalCode " ) %>
<br>
<br>
<%# DataBinder.Eval (Container.Data Item, "ContactNam e" ) %>
<br>
<%# DataBinder.Eval (Container.Data Item, "ContactTit le" ) %>
<br>
<%# DataBinder.Eval (Container.Data Item, "Phone" ) %>
</ItemTemplate>
</asp:TemplateCol umn>
<asp:TemplateCo lumn ItemStyle-VerticalAlign=" Top"
HeaderText="Ord ers">
<%-- Embedded DataGrid will go here --%>
</asp:TemplateCol umn>
</Columns>
</asp:DataGrid>
<!-- End DataGrid -->
</form>
<!-- End Web Form -->
</body>
</HTML>
---------------------
CODE BEHIND
----------------------
using System;
using System.Data;
using System.Data.Sql Client;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Web.UI.W ebControls;
using System.Web.UI.H tmlControls;
using System.Configur ation;
namespace MasterDetail
{
public class CustomerOrderDa taGrid : System.Web.UI.P age
{
protected DataGrid CustomerDataGri d;
private DataSet ds = new DataSet();
private void Page_Load(objec t sender, System.EventArg s e)
{
string sqlStmt = "SELECT top 2 * FROM Customers; SELECT * FROM Orders";
string conString =
"server=localho st;database=Nor thwind;uid=sa;p wd=tietronix;";
SqlDataAdapter sda = new SqlDataAdapter( sqlStmt, conString);
sda.Fill(ds);
ds.Tables[0].TableName = "Customers" ;
ds.Tables[1].TableName = "Orders";
CustomerDataGri d.DataSource = ds.Tables["Customers"];
CustomerDataGri d.DataBind();
}
//Use the OnItemDataBound event handler to dynamically add an embedded
DataGrid
protected void CustomerDataGri d_OnItemDataBou nd(object sender,
DataGridItemEve ntArgs e)
{
//When each row is created in the DataGrid, eval the ItemType
if(e.Item.ItemT ype == ListItemType.It em ||
e.Item.ItemType == ListItemType.Al ternatingItem)
{
//If the ItemType is Item or AlternatingItem ,
//Create a new DataGrid object named OrdersDataGrid
DataGrid OrdersDataGrid = new DataGrid();
//Format the DataGrid to look cool.
OrdersDataGrid. BorderWidth = (Unit)1;
OrdersDataGrid. CellPadding = 4;
OrdersDataGrid. CellSpacing = 0;
OrdersDataGrid. GridLines = GridLines.Horiz ontal;
OrdersDataGrid. BorderColor = Color.FromName( "Black");
OrdersDataGrid. ItemStyle.Font. Name = "Verdana";
OrdersDataGrid. ItemStyle.Font. Size = FontUnit.XSmall ;
OrdersDataGrid. AlternatingItem Style.BackColor =
Color.FromName( "LightGray" );
OrdersDataGrid. ShowHeader = true;
OrdersDataGrid. HeaderStyle.Bac kColor = Color.FromName( "Black");
OrdersDataGrid. HeaderStyle.For eColor = Color.FromName( "White");
OrdersDataGrid. HeaderStyle.Fon t.Bold = true;
OrdersDataGrid. HeaderStyle.Fon t.Size = FontUnit.XSmall ;
//Do not autogenerate columns.
OrdersDataGrid. AutoGenerateCol umns = false;
//Add a series of BoundColumns
//Order ID
BoundColumn bc = new BoundColumn();
//Set the BoundColumn Values
bc.HeaderText = "Order ID";
bc.DataField = "OrderID";
bc.ItemStyle.Wr ap = false;
//Add the BoundColumn to the OrdersDataGrid.
OrdersDataGrid. Columns.Add(bc) ;
//Order Date
bc = new BoundColumn();
bc.HeaderText = "Order Date";
bc.DataField = "OrderDate" ;
bc.DataFormatSt ring="{0:d}";
bc.ItemStyle.Wr ap = false;
OrdersDataGrid. Columns.Add(bc) ;
//Required Date
bc = new BoundColumn();
bc.HeaderText = "Required Date";
bc.DataField = "RequiredDa te";
bc.DataFormatSt ring="{0:d}";
bc.ItemStyle.Wr ap = false;
OrdersDataGrid. Columns.Add(bc) ;
//Shipped Date
bc = new BoundColumn();
bc.HeaderText = "Shipped Date";
bc.DataField = "ShippedDat e";
bc.DataFormatSt ring="{0:d}";
bc.ItemStyle.Wr ap = false;
OrdersDataGrid. Columns.Add(bc) ;
//End BoundColumns
TemplateColumn tc = new TemplateColumn( );
tc.HeaderText = "Drop Down Menu";
OrdersDataGrid. Columns.Add(tc) ;
//Get the Authors DataView and filter it for the current ISBN
DataView _orders = ds.Tables["Orders"].DefaultView;
_orders.RowFilt er = "CustomerID ='" + e.Item.Cells[0].Text + "'";
//Bind the DataGrid.
OrdersDataGrid. DataSource = _orders;
OrdersDataGrid. DataBind();
// ADD THE EVENT TO THE EMBEDDED GRID HERE
OrdersDataGrid. ItemDataBound += new
System.Web.UI.W ebControls.Data GridItemEventHa ndler(this.Orde rsDataGrid_Item DataBound);
//Add the OrdersDataGrid to the BooksDataGrid.
e.Item.Cells[3].Controls.Add(O rdersDataGrid);
}
}
private void OrdersDataGrid_ ItemDataBound(o bject sender,
System.Web.UI.W ebControls.Data GridItemEventAr gs e)
{
//CODE NEVER REACHES HERE.
int i=1;
i=10 + 12;
}
override protected void OnInit(EventArg s e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeCompo nent();
base.OnInit(e);
}
private void InitializeCompo nent()
{
this.CustomerDa taGrid.ItemCrea ted += new
System.Web.UI.W ebControls.Data GridItemEventHa ndler(this.Cust omerDataGrid_It emCreated);
//this.CustomerDa taGrid.ItemData Bound += new
System.Web.UI.W ebControls.Data GridItemEventHa ndler(this.Cust omerDataGrid_On ItemDataBound);
this.Load += new System.EventHan dler(this.Page_ Load);
}
private void CustomerDataGri d_ItemCreated(o bject sender,
System.Web.UI.W ebControls.Data GridItemEventAr gs e)
{
int i=1;
i=10 + 12;
}
}
}