Repeater in a custom control
Hi,
I'm experiencing some issues wanting to put a repeater control into a custom control.
Here is a part of my template :
<div class="infoGauche"> <asp:Repeater ID="rpt_descriptifs" runat="server"> <ItemTemplate> <h3><asp:Label ID="lbl_TitreDescriptif" runat="server" /></h3> <%#DataBinder.Eval(Container.DataItem, "Descriptif")%> </ItemTemplate> </asp:Repeater></div>01.public class ProductViewer : SimpleView02. 03. 04. public int IDProduit get; set; 05. protected virtual Repeater Rpt_descriptifs06. 07. get08. 09. return base.Container.GetControl<Repeater>("rpt_descriptifs", true);10. 11. 12. 13. protected override void InitializeControls(GenericContainer container)14. 15. if (!Page.Request.Params["id"].IsNullOrEmpty())16. 17. int idProd = 0;18. if (!int.TryParse(Page.Request.Params["id"], out idProd))19. 20. // Manage the errors here21. 22. IDProduit = idProd;23. 24. 25. 26. 27. if (IDProduit > 0)28. 29. 30. DataAccessor da = new DataAccessor();31. Produit prod = da.GetProduit(IDProduit);32. 33. if (Rpt_descriptifs != null)34. 35. Rpt_descriptifs.DataSource = prod.Deroulement.ToList();36. Rpt_descriptifs.ItemDataBound += new RepeaterItemEventHandler(rpt_descriptifs_itemDataBound);37. Rpt_descriptifs.DataBind();38. 39. 40. 41. 42. 43. 44. protected override string LayoutTemplateName45. 46. get47. 48. return "MDC_ProductViewer.Resources.Views.ProductViewer.ascx";49. 50. 51. 52. protected void rpt_descriptifs_itemDataBound(object o, RepeaterItemEventArgs e)53. 54. switch (e.Item.ItemType)55. 56. case ListItemType.Item:57. case ListItemType.AlternatingItem:58. Deroulement d = e.Item.DataItem as Deroulement;59. if (d != null)60. 61. Label lbl_libelle = e.Item.FindControl("lbl_TitreDescriptif") as Label;62. if (lbl_libelle != null)63. 64. lbl_libelle.Text = "Jour " + d.JourDebut.ToString();65. if (d.JourFin > 0)66. 67. lbl_libelle.Text += " à " + d.JourFin.ToString();68. 69. lbl_libelle.Text += " : " + d.Titre;70. 71. 72. 73. 74. 75. 76. break;77. 78. 79. I seem to recall encountering this issue a while back. I think that you need to call the databind command later in the sequence. you can do it in the Page_Load event using an override:
protected override void OnLoad(EventArgs e) // databind here Hi, and thank you for this answer, but it still doesn't work, I get the same exception.
And as I saw by placing breakpoints, the OnLoad event is called before the InitializeComponent event, seems a bit weird.
I'm getting a try with a user control, but I'd like to be able to use my controls in several projects.
Custom control doesn't seem to like the databinding on a repeater, even if I don't really understand why, because regarding the documentation, the exact same code seems to work correctly for a RadRotator control.
Thank you for your help.
Hello Pierre-Jean,
There was a similar question before:
http://www.sitefinity.com/devnet/forums/sitefinity-4-x/general-discussions/how-to-databind-asp-net-gridview-in-custom-module.aspx
As you can see you should override the OnPreRender of the SimpleView and perform the binding there.
Best wishes,
Lubomir Velkov
the Telerik team
Thank you for being the most amazing .NET community! Your unfailing support is what helps us charge forward! We'd appreciate your vote for Telerik in this year's DevProConnections Awards. We are competing in mind-blowing 20 categories and every vote counts! VOTE for Telerik NOW >>