Repeater.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. /**
  2. * Namespace: System.Web.UI.WebControls
  3. * Class: Repeater
  4. *
  5. * Author: Gaurav Vaish
  6. * Maintainer: [email protected]
  7. * Contact: <[email protected]>, <[email protected]>
  8. * Implementation: yes
  9. * Status: 90%
  10. *
  11. * (C) Gaurav Vaish (2002)
  12. */
  13. using System;
  14. using System.Web;
  15. using System.Web.UI;
  16. namespace System.Web.UI.WebControls
  17. {
  18. public class Repeater : Control, INamingContainer
  19. {
  20. private static readonly object ItemCommandEvent = new object();
  21. private static readonly object ItemCreatedEvent = new object();
  22. private static readonly object ItemDataBoundEvent = new object();
  23. private static readonly string ITEMCOUNT = "Repeater_Item_Count";
  24. private ITemplate alternatingItemTemplate;
  25. private ITemplate footerTemplate;
  26. private ITemplate headerTemplate;
  27. private ITemplate itemTemplate;
  28. private ITemplate separatorTemplate;
  29. private object dataSource;
  30. private RepeaterItemCollection items;
  31. private ArrayList itemsArrayList;
  32. public Repeater(): base()
  33. {
  34. }
  35. public event RepeaterCommandEventHandler ItemCommand
  36. {
  37. add
  38. {
  39. Events.AddHandler(ItemCommandEvent, value);
  40. }
  41. remove
  42. {
  43. Events.RemoveHandler(ItemCommandEvent, value);
  44. }
  45. }
  46. public event RepeaterItemEventHandler ItemCreated
  47. {
  48. add
  49. {
  50. Events.AddHandler(ItemCreatedEvent, value);
  51. }
  52. remove
  53. {
  54. Events.RemoveHandler(ItemCreatedEvent, value);
  55. }
  56. }
  57. public event RepeaterItemEventHandler ItemDataBound
  58. {
  59. add
  60. {
  61. Events.AddHandler(ItemDataBoundEvent, value);
  62. }
  63. remove
  64. {
  65. Events.RemoveHandler(ItemDataBoundEvent, value);
  66. }
  67. }
  68. public virtual ITemplate AlternatingItemTemplate
  69. {
  70. get
  71. {
  72. return alternatingItemTemplate;
  73. }
  74. set
  75. {
  76. alternatingItemTemplate = value;
  77. }
  78. }
  79. public override ControlCollection Controls
  80. {
  81. get
  82. {
  83. EnsureChildControls();
  84. return Controls;
  85. }
  86. }
  87. public virtual string DataMember
  88. {
  89. get
  90. {
  91. object o = ViewState["DataMember"];
  92. if(o != null)
  93. {
  94. return (string)o;
  95. }
  96. return String.Empty;
  97. }
  98. set
  99. {
  100. ViewState["DataMember"] = value;
  101. }
  102. }
  103. public virtual object DataSource
  104. {
  105. get
  106. {
  107. return dataSource;
  108. }
  109. set
  110. {
  111. dataSource = value;
  112. }
  113. }
  114. public virtual ITemplate FooterTemplate
  115. {
  116. get
  117. {
  118. return footerTemplate;
  119. }
  120. set
  121. {
  122. footerTemplate = value;
  123. }
  124. }
  125. public virtual ITemplate HeaderTemplate
  126. {
  127. get
  128. {
  129. return headerTemplate;
  130. }
  131. set
  132. {
  133. headerTemplate = value;
  134. }
  135. }
  136. public virtual RepeaterItemCollection Items
  137. {
  138. get
  139. {
  140. if(items != null)
  141. {
  142. if(itemsArrayList != null)
  143. {
  144. EnsureChildControls();
  145. }
  146. items = new RepeaterItemCollection(itemsArrayList);
  147. }
  148. return items;
  149. }
  150. }
  151. public virtual ITemplate ItemTemplate
  152. {
  153. get
  154. {
  155. return itemTemplate;
  156. }
  157. set
  158. {
  159. itemTemplate = value;
  160. }
  161. }
  162. public virtual ITemplate SeparatorTemplate
  163. {
  164. get
  165. {
  166. return separatorTemplate;
  167. }
  168. set
  169. {
  170. separatorTemplate = value;
  171. }
  172. }
  173. public override void DataBind()
  174. {
  175. OnDataBinding(EventArgs.Empty);
  176. }
  177. protected override void CreateChildControls()
  178. {
  179. Controls.Clear();
  180. if(ViewState[ITEMCOUNT] != null)
  181. {
  182. CreateControlHierarchy(false);
  183. } else
  184. {
  185. itemsArrayList = new ArrayList();
  186. }
  187. ClearChildViewState();
  188. }
  189. /// <summary>
  190. /// Undocumented
  191. /// </summary>
  192. [MonoTODO]
  193. protected void CreateControlHierarchy(bool useDataSource)
  194. {
  195. //TODO: Fille me up
  196. throw new NotImplementedException();
  197. }
  198. protected override bool OnBubbleEvent(object sender, EventArgs e)
  199. {
  200. bool retVal = false;
  201. if(e is RepeaterCommandEventArgs)
  202. {
  203. OnItemCommand((RepeaterCommandEventArgs)e);
  204. retVal = true;
  205. }
  206. return retVal;
  207. }
  208. protected override void OnDataBinding(EventArgs e)
  209. {
  210. OnDataBinding(e);
  211. Controls.Clear();
  212. ClearChildViewState();
  213. CreateControlHierarchy(true);
  214. ChildControlCreated = true;
  215. }
  216. protected virtual void OnItemCommand(RepeaterCommandEventArgs e)
  217. {
  218. if(Events != null)
  219. {
  220. RepeaterCommandEventHandler rceh = (RepeaterCommandEventHandler)(ViewState[ItemCommandEvent]);
  221. if(rceh != null)
  222. {
  223. rceh(this, e);
  224. }
  225. }
  226. }
  227. protected virtual void OnItemCreated(RepeaterCommandEventArgs e)
  228. {
  229. if(Events != null)
  230. {
  231. RepeaterCommandEventHandler rceh = (RepeaterCommandEventHandler)(ViewState[ItemCreatedEvent]);
  232. if(rceh != null)
  233. {
  234. rceh(this, e);
  235. }
  236. }
  237. }
  238. protected virtual void OnItemDataBound(RepeaterCommandEventArgs e)
  239. {
  240. if(Events != null)
  241. {
  242. RepeaterCommandEventHandler rceh = (RepeaterCommandEventHandler)(ViewState[ItemDataBoundEvent]);
  243. if(rceh != null)
  244. {
  245. rceh(this, e);
  246. }
  247. }
  248. }
  249. }
  250. }