Here is what I ended up doing:
In the Page_Load:
//Define repeater event handler before databinding
MyReviewsRpt.ItemDataBound += new RepeaterItemEventHandler(MyReviewsRpt_ItemDataBound);
//Load repeater with XML file
XmlReader XmlReader = controller.GetMyReviewsXML(emp.EmpID);
DataSet ds = new DataSet();
if (XmlReader == null)
{
NoReviewsLbl.Visible = true;
}
else
{
ds.ReadXml(XmlReader);
MyReviewsRpt.DataSource = ds;
MyReviewsRpt.DataBind();
}
In the Repeater's Item Data Bound event:
protected
void MyReviewsRpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
RepeaterItem item = e.Item;
if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem))
{
//Find Nested GridView
MyReviewsGrid = (GridView)item.FindControl("MyReviewsGrid");
//Find Unit Type/Unit Number for individual items
HeaderUnitNum = (Label)item.FindControl("HeaderUnitNum");
HeaderUnitType = (Label)item.FindControl("HeaderUnitType");
CollapsiblePanelExtender = (AjaxControlToolkit.CollapsiblePanelExtender)item.FindControl("CollapsiblePanelExtender");if (emp.UnitType == "HR" || emp.UnitType == "President" || emp.UnitType == "HRField")
{
OverallSalaryWSLink.Visible = false;
}
//Create GridView event handler after control definition but before binding
MyReviewsGrid.RowDataBound += new GridViewRowEventHandler(MyReviewsGrid_RowDataBound);
MyReviewsGrid.DataBound += new EventHandler(MyReviewsGrid_DataBound);
//Load Data from XML File
DataRowView drv = (DataRowView)item.DataItem;
MyReviewsGrid.DataSource = drv.CreateChildView("Unit_Employee");
MyReviewsGrid.DataBind();
}
I had never tried to bind to a control created by another in this fashion. I have a repeater that repeats gridviews within a collapsible panel. Very clean!