Revision: 35041
Updated Code
at December 17, 2010 07:16 by housecor
Updated Code
private void rptMonthSummary_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) { ListItemType lt = e.Item.ItemType; if(lt == ListItemType.Item || lt == ListItemType.AlternatingItem) { DataRowView dv = e.Item.DataItem as DataRowView; if(dv != null) { Repeater nestedRepeater = e.Item.FindControl("rptDailySummary") as Repeater; if (nestedRepeater != null) { nestedRepeater.DataSource = dv.CreateChildView("yearMonth"); nestedRepeater.DataBind(); } } } } //here's a full code-behind that uses a strongly typed list of results to filter: public List<ProductWithType> ProductList = new List<ProductWithType>(); protected void Page_Load(object sender, EventArgs e) { GetProducts(); } private void GetProducts() { using (FTJEntities context = new FTJEntities()) { ProductList = (from p in context.Products orderby p.ProductType.Name, p.Name select new ProductWithType() { ProductID = p.ProductID, ProductTypeID = p.ProductTypeID, Name = p.Name, Type = p.ProductType.Name, ShortDescription = p.ShortDescription }).ToList<ProductWithType>(); rptProductTypes.DataSource = ProductList; rptProductTypes.DataBind(); } } public void rptProductTypes_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) { ListItemType lt = e.Item.ItemType; if (!(lt == ListItemType.Item || lt == ListItemType.AlternatingItem)) return; //only interested in the item/alternatingitem databind calls to this method, not the header, footer, etc. ProductWithType product = e.Item.DataItem as ProductWithType; //get the current row being databound Repeater rptProducts = e.Item.FindControl("rptProducts") as Repeater; //get the nested control rptProducts.DataSource = from p in ProductList where p.ProductTypeID == product.ProductTypeID select p; rptProducts.DataBind(); } } /// <summary> /// Used so result set above can be strongly typed. /// </summary> public class ProductWithType { public int ProductID { get; set; } public int ProductTypeID { get; set; } public string Name { get; set; } public string Type { get; set; } public string ShortDescription { get; set; } }
Revision: 35040
Updated Code
at November 10, 2010 14:01 by housecor
Updated Code
private void rptMonthSummary_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e) { ListItemType lt = e.Item.ItemType; if(lt == ListItemType.Item || lt == ListItemType.AlternatingItem) { DataRowView dv = e.Item.DataItem as DataRowView; if(dv != null) { Repeater nestedRepeater = e.Item.FindControl("rptDailySummary") as Repeater; if (nestedRepeater != null) { nestedRepeater.DataSource = dv.CreateChildView("yearMonth"); nestedRepeater.DataBind(); } } } }
Revision: 35039
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 1, 2010 13:03 by housecor
Initial Code
protected void rptNews_OnItemDataBound(object src, RepeaterItemEventArgs e) { int caseIDAboutToBePrinted = (int)DataBinder.Eval(e.Item.DataItem, "case_ID"); if (caseIDAboutToBePrinted != LastCaseIDPrinted) { //so about to print a new case if (LastCaseIDPrinted != null) //so about to print a new case and a previous case has been printed, so need to close previous div { ((Literal)e.Item.FindControl("litClosePreviousCaseDiv")).Text = "</div>"; } ((Literal)e.Item.FindControl("litOpenCaseDiv")).Text = "<div class=\"accordion\" id=\"case" + caseIDAboutToBePrinted + "\">"; } LastCaseIDPrinted = caseIDAboutToBePrinted; //now close the final div if about to print last item. if (e.Item.ItemIndex == NumNewsItems - 1) { ((Literal)e.Item.FindControl("litCloseCaseDiv")).Text = "</div>"; } BindAttachedFiles(e); } //and in the front end: <asp:Repeater ID="rptNews" runat="server" OnItemDataBound="rptNews_OnItemDataBound"> <ItemTemplate> <asp:Literal ID="litClosePreviousCaseDiv" runat="server"></asp:Literal> <asp:Literal ID="litOpenCaseDiv" runat="server"/> <h3><a href="#"><%#DataBinder.Eval(Container.DataItem, "Created")%> - <%#DataBinder.Eval(Container.DataItem, "Title")%></a></h3> <div> <%#DataBinder.Eval(Container.DataItem, "Body")%> <asp:Repeater ID="rptFiles" runat="server"> <HeaderTemplate> <h3>Attachments</h3> <ul style="list-style-type:none;"> </HeaderTemplate> <ItemTemplate> <li> <img src="../App_Themes/Theme1/Images/<%#DataBinder.Eval(Container.DataItem, "t.Icon")%>" alt="<%#DataBinder.Eval(Container.DataItem, "t.TypeName")%>" title="<%#DataBinder.Eval(Container.DataItem, "t.TypeName")%>" /> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "/News/GetFile.ashx?ID=" + DataBinder.Eval(Container.DataItem, "f.CaseNewsFileID")%>' Text='<%#DataBinder.Eval(Container.DataItem, "f.Filename")%>'></asp:HyperLink> </li> </ItemTemplate> <FooterTemplate></ul></FooterTemplate> </asp:Repeater> </div> <asp:Literal ID="litCloseCaseDiv" runat="server"></asp:Literal> </ItemTemplate> </asp:Repeater>
Initial URL
http://idunno.org/archive/2004/10/30/145.aspx
Initial Description
Used to create a tabbed structure with accordions inside. NOTE: OnItemDataBound is called for each section, so you may want to filter on the proper section: ListItemType lt = e.Item.ItemType; if(lt == ListItemType.Item)....
Initial Title
Nested Repeaters using onitemdatabound
Initial Tags
Initial Language
C#