ObjectDataSource.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. //
  2. // System.Web.UI.WebControls.ObjectDataSource
  3. //
  4. // Authors:
  5. // Lluis Sanchez Gual ([email protected])
  6. //
  7. // (C) 2005 Novell, Inc. (http://www.novell.com)
  8. //
  9. //
  10. // Permission is hereby granted, free of charge, to any person obtaining
  11. // a copy of this software and associated documentation files (the
  12. // "Software"), to deal in the Software without restriction, including
  13. // without limitation the rights to use, copy, modify, merge, publish,
  14. // distribute, sublicense, and/or sell copies of the Software, and to
  15. // permit persons to whom the Software is furnished to do so, subject to
  16. // the following conditions:
  17. //
  18. // The above copyright notice and this permission notice shall be
  19. // included in all copies or substantial portions of the Software.
  20. //
  21. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  22. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  23. // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  24. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
  25. // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
  26. // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  27. // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  28. //
  29. #if NET_2_0
  30. using System.Collections;
  31. using System.Collections.Specialized;
  32. using System.ComponentModel;
  33. using System.IO;
  34. using System.Security.Permissions;
  35. using System.Drawing;
  36. namespace System.Web.UI.WebControls
  37. {
  38. [DefaultEventAttribute ("Selecting")]
  39. [DefaultPropertyAttribute ("TypeName")]
  40. [DesignerAttribute ("System.Web.UI.Design.WebControls.ObjectDataSourceDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
  41. [ParseChildrenAttribute (true)]
  42. [PersistChildrenAttribute (false)]
  43. [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
  44. [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
  45. [ToolboxBitmap ("bitmap file goes here")]
  46. public class ObjectDataSource : DataSourceControl
  47. {
  48. ObjectDataSourceView defaultView;
  49. public ObjectDataSource ()
  50. {
  51. }
  52. public ObjectDataSource (string typeName, string selectMethod)
  53. {
  54. SelectMethod = selectMethod;
  55. TypeName = typeName;
  56. }
  57. ObjectDataSourceView DefaultView {
  58. get {
  59. if (defaultView == null)
  60. defaultView = new ObjectDataSourceView (this, "DefaultView", Context);
  61. return defaultView;
  62. }
  63. }
  64. public event ObjectDataSourceStatusEventHandler Deleted {
  65. add { DefaultView.Deleted += value; }
  66. remove { DefaultView.Deleted -= value; }
  67. }
  68. public event ObjectDataSourceMethodEventHandler Deleting {
  69. add { DefaultView.Deleting += value; }
  70. remove { DefaultView.Deleting -= value; }
  71. }
  72. public event ObjectDataSourceFilteringEventHandler Filtering {
  73. add { DefaultView.Filtering += value; }
  74. remove { DefaultView.Filtering -= value; }
  75. }
  76. public event ObjectDataSourceStatusEventHandler Inserted {
  77. add { DefaultView.Inserted += value; }
  78. remove { DefaultView.Inserted -= value; }
  79. }
  80. public event ObjectDataSourceMethodEventHandler Inserting {
  81. add { DefaultView.Inserting += value; }
  82. remove { DefaultView.Inserting -= value; }
  83. }
  84. public event ObjectDataSourceObjectEventHandler ObjectCreated {
  85. add { DefaultView.ObjectCreated += value; }
  86. remove { DefaultView.ObjectCreated -= value; }
  87. }
  88. public event ObjectDataSourceObjectEventHandler ObjectCreating {
  89. add { DefaultView.ObjectCreating += value; }
  90. remove { DefaultView.ObjectCreating -= value; }
  91. }
  92. public event ObjectDataSourceDisposingEventHandler ObjectDisposing {
  93. add { DefaultView.ObjectDisposing += value; }
  94. remove { DefaultView.ObjectDisposing -= value; }
  95. }
  96. /* public event ObjectDataSourceResolvingMethodEventHandler ResolvingMethod {
  97. add { DefaultView.ResolvingMethod += value; }
  98. remove { DefaultView.ResolvingMethod -= value; }
  99. }
  100. */
  101. public event ObjectDataSourceStatusEventHandler Selected {
  102. add { DefaultView.Selected += value; }
  103. remove { DefaultView.Selected -= value; }
  104. }
  105. public event ObjectDataSourceSelectingEventHandler Selecting {
  106. add { DefaultView.Selecting += value; }
  107. remove { DefaultView.Selecting -= value; }
  108. }
  109. public event ObjectDataSourceStatusEventHandler Updated {
  110. add { DefaultView.Updated += value; }
  111. remove { DefaultView.Updated -= value; }
  112. }
  113. public event ObjectDataSourceMethodEventHandler Updating {
  114. add { DefaultView.Updating += value; }
  115. remove { DefaultView.Updating -= value; }
  116. }
  117. [DefaultValue (0)]
  118. [TypeConverter ("System.Web.UI.DataSourceCacheDurationConverter, " + Consts.AssemblySystem_Web)]
  119. [MonoTODO]
  120. public virtual int CacheDuration
  121. {
  122. get {
  123. throw new NotImplementedException ();
  124. }
  125. set {
  126. throw new NotImplementedException ();
  127. }
  128. }
  129. [DefaultValue (DataSourceCacheExpiry.Absolute)]
  130. [MonoTODO]
  131. public virtual DataSourceCacheExpiry CacheExpirationPolicy
  132. {
  133. get {
  134. throw new NotImplementedException ();
  135. }
  136. set {
  137. throw new NotImplementedException ();
  138. }
  139. }
  140. [DefaultValue ("")]
  141. [MonoTODO]
  142. public virtual string CacheKeyDependency
  143. {
  144. get {
  145. throw new NotImplementedException ();
  146. }
  147. set {
  148. throw new NotImplementedException ();
  149. }
  150. }
  151. [WebCategoryAttribute ("Data")]
  152. [DefaultValueAttribute (ConflictOptions.OverwriteChanges)]
  153. public ConflictOptions ConflictDetection {
  154. get { return DefaultView.ConflictDetection; }
  155. set { DefaultView.ConflictDetection = value; }
  156. }
  157. [DefaultValue (false)]
  158. [MonoTODO]
  159. public bool ConvertNullToDBNull
  160. {
  161. get {
  162. throw new NotImplementedException ();
  163. }
  164. set {
  165. throw new NotImplementedException ();
  166. }
  167. }
  168. [WebCategoryAttribute ("Data")]
  169. [DefaultValueAttribute ("")]
  170. public string DataObjectTypeName {
  171. get { return DefaultView.DataObjectTypeName; }
  172. set { DefaultView.DataObjectTypeName = value; }
  173. }
  174. [WebCategoryAttribute ("Data")]
  175. [DefaultValueAttribute ("")]
  176. public string DeleteMethod {
  177. get { return DefaultView.DeleteMethod; }
  178. set { DefaultView.DeleteMethod = value; }
  179. }
  180. [WebCategoryAttribute ("Data")]
  181. [MergablePropertyAttribute (false)]
  182. [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
  183. [DefaultValueAttribute (null)]
  184. [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
  185. public ParameterCollection DeleteParameters {
  186. get { return DefaultView.DeleteParameters; }
  187. }
  188. [DefaultValue (false)]
  189. [MonoTODO]
  190. public virtual bool EnableCaching
  191. {
  192. get {
  193. throw new NotImplementedException ();
  194. }
  195. set {
  196. throw new NotImplementedException ();
  197. }
  198. }
  199. [WebCategoryAttribute ("Paging")]
  200. [DefaultValueAttribute (false)]
  201. public virtual bool EnablePaging {
  202. get { return DefaultView.EnablePaging; }
  203. set { DefaultView.EnablePaging = value; }
  204. }
  205. [WebCategoryAttribute ("Data")]
  206. [DefaultValueAttribute ("")]
  207. public string FilterExpression {
  208. get { return DefaultView.FilterExpression; }
  209. set { DefaultView.FilterExpression = value; }
  210. }
  211. [WebCategoryAttribute ("Data")]
  212. [MergablePropertyAttribute (false)]
  213. [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
  214. [DefaultValueAttribute (null)]
  215. [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
  216. public ParameterCollection FilterParameters {
  217. get { return DefaultView.FilterParameters; }
  218. }
  219. [DefaultValueAttribute ("")]
  220. [WebCategoryAttribute ("Data")]
  221. public virtual string InsertMethod {
  222. get { return DefaultView.InsertMethod; }
  223. set { DefaultView.InsertMethod = value; }
  224. }
  225. [WebCategoryAttribute ("Data")]
  226. [MergablePropertyAttribute (false)]
  227. [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
  228. [DefaultValueAttribute (null)]
  229. [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
  230. public ParameterCollection InsertParameters {
  231. get { return DefaultView.InsertParameters; }
  232. }
  233. [WebCategoryAttribute ("Paging")]
  234. [DefaultValueAttribute ("maximumRows")]
  235. public string MaximumRowsParameterName {
  236. get { return DefaultView.MaximumRowsParameterName; }
  237. set { DefaultView.MaximumRowsParameterName = value; }
  238. }
  239. [WebCategoryAttribute ("Data")]
  240. [DefaultValueAttribute ("original_{0}")]
  241. public string OldValuesParameterFormatString {
  242. get { return DefaultView.OldValuesParameterFormatString; }
  243. set { DefaultView.OldValuesParameterFormatString = value; }
  244. }
  245. [WebCategoryAttribute ("Paging")]
  246. [DefaultValueAttribute ("")]
  247. public virtual string SelectCountMethod {
  248. get { return DefaultView.SelectCountMethod; }
  249. set { DefaultView.SelectCountMethod = value; }
  250. }
  251. [DefaultValueAttribute ("")]
  252. [WebCategoryAttribute ("Data")]
  253. public virtual string SelectMethod {
  254. get { return DefaultView.SelectMethod; }
  255. set { DefaultView.SelectMethod = value; }
  256. }
  257. [WebCategoryAttribute ("Data")]
  258. [MergablePropertyAttribute (false)]
  259. [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
  260. [DefaultValueAttribute (null)]
  261. [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
  262. public ParameterCollection SelectParameters {
  263. get { return DefaultView.SelectParameters; }
  264. }
  265. [DefaultValueAttribute ("")]
  266. [WebCategoryAttribute ("Data")]
  267. public string SortParameterName {
  268. get { return DefaultView.SortParameterName; }
  269. set { DefaultView.SortParameterName = value; }
  270. }
  271. [DefaultValue ("")]
  272. [MonoTODO]
  273. public virtual string SqlCacheDependency
  274. {
  275. get {
  276. throw new NotImplementedException ();
  277. }
  278. set {
  279. throw new NotImplementedException ();
  280. }
  281. }
  282. [WebCategoryAttribute ("Paging")]
  283. [DefaultValueAttribute ("startRowIndex")]
  284. public string StartRowIndexParameterName {
  285. get { return DefaultView.StartRowIndexParameterName; }
  286. set { DefaultView.StartRowIndexParameterName = value; }
  287. }
  288. [DefaultValueAttribute ("")]
  289. [WebCategoryAttribute ("Data")]
  290. public virtual string TypeName {
  291. get { return DefaultView.TypeName; }
  292. set { DefaultView.TypeName = value; }
  293. }
  294. [DefaultValueAttribute ("")]
  295. [WebCategoryAttribute ("Data")]
  296. public virtual string UpdateMethod {
  297. get { return DefaultView.UpdateMethod; }
  298. set { DefaultView.UpdateMethod = value; }
  299. }
  300. [WebCategoryAttribute ("Data")]
  301. [MergablePropertyAttribute (false)]
  302. [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
  303. [DefaultValueAttribute (null)]
  304. [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
  305. public ParameterCollection UpdateParameters {
  306. get { return DefaultView.UpdateParameters; }
  307. }
  308. protected override DataSourceView GetView (string viewName)
  309. {
  310. return DefaultView;
  311. }
  312. protected override ICollection GetViewNames ()
  313. {
  314. return new string [] { "DefaultView" };
  315. }
  316. public IEnumerable Select ()
  317. {
  318. return DefaultView.Select (DataSourceSelectArguments.Empty);
  319. }
  320. public int Update ()
  321. {
  322. Hashtable empty = new Hashtable ();
  323. return DefaultView.Update (empty, empty, null);
  324. }
  325. public int Delete ()
  326. {
  327. Hashtable empty = new Hashtable ();
  328. return DefaultView.Delete (empty, null);
  329. }
  330. public int Insert ()
  331. {
  332. Hashtable empty = new Hashtable ();
  333. return DefaultView.Insert (empty);
  334. }
  335. protected internal override void OnInit (EventArgs e)
  336. {
  337. Page.LoadComplete += OnPageLoadComplete;
  338. }
  339. void OnPageLoadComplete (object sender, EventArgs e)
  340. {
  341. DeleteParameters.UpdateValues (Context, this);
  342. FilterParameters.UpdateValues (Context, this);
  343. InsertParameters.UpdateValues (Context, this);
  344. SelectParameters.UpdateValues (Context, this);
  345. UpdateParameters.UpdateValues (Context, this);
  346. }
  347. protected override void LoadViewState (object savedState)
  348. {
  349. if (savedState == null) {
  350. base.LoadViewState (null);
  351. ((IStateManager)DefaultView).LoadViewState (null);
  352. } else {
  353. Pair p = (Pair) savedState;
  354. base.LoadViewState (p.First);
  355. ((IStateManager)DefaultView).LoadViewState (p.Second);
  356. }
  357. }
  358. protected override object SaveViewState()
  359. {
  360. object baseState = base.SaveViewState ();
  361. object viewState = ((IStateManager)DefaultView).SaveViewState ();
  362. if (baseState != null || viewState != null) return new Pair (baseState, viewState);
  363. else return null;
  364. }
  365. protected override void TrackViewState()
  366. {
  367. ((IStateManager)DefaultView).TrackViewState ();
  368. }
  369. }
  370. }
  371. #endif