BaseDataListDesigner.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. /**
  2. * Namespace: System.Web.UI.Design.WebControls
  3. * Class: BaseDataListDesigner
  4. *
  5. * Author: Gaurav Vaish
  6. * Maintainer: mastergaurav AT users DOT sf DOT net
  7. *
  8. * (C) Gaurav Vaish (2002)
  9. */
  10. using System;
  11. using System.Collections;
  12. using System.ComponentModel;
  13. using System.ComponentModel.Design;
  14. using System.Reflection;
  15. using System.Web.UI.Design;
  16. using System.Web.UI;
  17. using System.Web.UI.WebControls;
  18. using System.Data;
  19. namespace System.Web.UI.Design.WebControls
  20. {
  21. public abstract class BaseDataListDesigner : TemplatedControlDesigner,
  22. IDataSourceProvider
  23. {
  24. private BaseDataList baseDataList;
  25. private DataTable desTimeDataTable;
  26. private DataTable dummyDataTable;
  27. private static readonly string[] validNames = new string[] {
  28. "AlternatingItemStyle",
  29. "BackColor",
  30. "DataSource",
  31. "DataMember",
  32. "EditItemStyle",
  33. "Font",
  34. "ForeColor",
  35. "HeaderStyle",
  36. "FooterStyle",
  37. "ItemStyle",
  38. "SelectedItemStyle",
  39. "SeparatorStyle"
  40. };
  41. public BaseDataListDesigner()
  42. {
  43. }
  44. public string DataKeyField
  45. {
  46. get
  47. {
  48. return baseDataList.DataKeyField;
  49. }
  50. set
  51. {
  52. baseDataList.DataKeyField = value;
  53. }
  54. }
  55. public string DataMember
  56. {
  57. get
  58. {
  59. return baseDataList.DataMember;
  60. }
  61. set
  62. {
  63. baseDataList.DataMember = value;
  64. }
  65. }
  66. public string DataSource
  67. {
  68. get
  69. {
  70. DataBinding element = DataBindings["DataSource"];
  71. if(element != null)
  72. {
  73. return element.Expression;
  74. }
  75. return String.Empty;
  76. }
  77. set
  78. {
  79. if(value == null && value.Length == 0)
  80. {
  81. DataBindings.Remove("DataSource");
  82. } else
  83. {
  84. DataBinding element = DataBindings["DataSource"];
  85. if(element == null)
  86. {
  87. element = new DataBinding("DataSource",
  88. typeof(IEnumerable),
  89. value);
  90. } else
  91. {
  92. element.Expression = value;
  93. }
  94. DataBindings.Add(element);
  95. }
  96. OnDataSourceChanged();
  97. OnBindingsCollectionChanged("DataSource");
  98. }
  99. }
  100. protected internal virtual void OnDataSourceChanged()
  101. {
  102. desTimeDataTable = null;
  103. }
  104. public override bool DesignTimeHtmlRequiresLoadComplete
  105. {
  106. get
  107. {
  108. return (DataSource.Length > 0);
  109. }
  110. }
  111. public override DesignerVerbCollection Verbs
  112. {
  113. get
  114. {
  115. throw new NotImplementedException();
  116. }
  117. }
  118. public object GetSelectedDataSource()
  119. {
  120. object retVal = null;
  121. DataBinding element = DataBindings["DataSource"];
  122. if(element != null)
  123. {
  124. retVal = DesignTimeData.GetSelectedDataSource(baseDataList,
  125. element.Expression);
  126. }
  127. return retVal;
  128. }
  129. public IEnumerable GetResolvedSelectedDataSource()
  130. {
  131. IEnumerable retVal = null;
  132. DataBinding element = DataBindings["DataSource"];
  133. if(element != null)
  134. {
  135. retVal = DesignTimeData.GetSelectedDataSource(baseDataList,
  136. element.Expression,
  137. DataMember);
  138. }
  139. return retVal;
  140. }
  141. public override IEnumerable GetTemplateContainerDataSource(
  142. string templateName)
  143. {
  144. return GetResolvedSelectedDataSource();
  145. }
  146. public override void Initialize(IComponent component)
  147. {
  148. baseDataList = (BaseDataList)component;
  149. base.Initialize(component);
  150. }
  151. public override void OnComponentChanged(object sender,
  152. ComponentChangedEventArgs e)
  153. {
  154. if(e.Member != null)
  155. {
  156. string name = e.Member.Name;
  157. foreach(string current in validNames)
  158. {
  159. if(name == current)
  160. {
  161. OnStylesChanged();
  162. break;
  163. }
  164. }
  165. }
  166. base.OnComponentChanged(sender, e);
  167. }
  168. protected internal void OnStylesChanged()
  169. {
  170. OnTemplateEditingVerbsChanged();
  171. }
  172. protected abstract void OnTemplateEditingVerbsChanged();
  173. protected override void Dispose(bool disposing)
  174. {
  175. if(disposing)
  176. baseDataList = null;
  177. base.Dispose(disposing);
  178. }
  179. protected IEnumerable GetDesignTimeDataSource(int minimumRows,
  180. out bool dummyDataSource)
  181. {
  182. return GetDesignTimeDataSource(GetResolvedSelectedDataSource(),
  183. minimumRows,
  184. out dummyDataSource);
  185. }
  186. protected IEnumerable GetDesignTimeDataSource(IEnumerable selectedDataSource,
  187. int minimumRows,
  188. out bool dummyDataSource)
  189. {
  190. DataTable toDeploy = desTimeDataTable;
  191. dummyDataSource = false;
  192. if(minimumRows == 0)
  193. {
  194. if(selectedDataSource != null)
  195. {
  196. desTimeDataTable = DesignTimeData.CreateSampleDataTable(
  197. selectedDataSource);
  198. toDeploy = desTimeDataTable;
  199. }
  200. if(toDeploy == null)
  201. {
  202. if(dummyDataTable == null)
  203. dummyDataTable = DesignTimeData.CreateDummyDataTable();
  204. toDeploy = dummyDataTable;
  205. dummyDataSource = true;
  206. }
  207. }
  208. return DesignTimeData.GetDesignTimeDataSource(toDeploy, minimumRows);
  209. }
  210. }
  211. }