SqlDataSourceView.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432
  1. //
  2. // System.Web.UI.WebControls.SqlDataSourceView
  3. //
  4. // Authors:
  5. // Ben Maurer ([email protected])
  6. //
  7. // (C) 2003 Ben Maurer
  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.Text;
  33. using System.Data;
  34. using System.ComponentModel;
  35. namespace System.Web.UI.WebControls {
  36. public class SqlDataSourceView : DataSourceView, IStateManager {
  37. public SqlDataSourceView (SqlDataSource owner, string name)
  38. {
  39. this.owner = owner;
  40. this.name = name;
  41. }
  42. public int Delete ()
  43. {
  44. return Delete (null);
  45. }
  46. [MonoTODO]
  47. public override int Delete (IDictionary parameters)
  48. {
  49. throw new NotImplementedException ();
  50. }
  51. public int Insert ()
  52. {
  53. return Insert (null);
  54. }
  55. [MonoTODO]
  56. public override int Insert (IDictionary values)
  57. {
  58. throw new NotImplementedException ();
  59. }
  60. [MonoTODO]
  61. public override IEnumerable Select ()
  62. {
  63. throw new NotImplementedException ();
  64. }
  65. public int Update ()
  66. {
  67. return Update (null, null);
  68. }
  69. [MonoTODO]
  70. public override int Update (IDictionary parameters, IDictionary values)
  71. {
  72. throw new NotImplementedException ();
  73. }
  74. void IStateManager.LoadViewState (object savedState)
  75. {
  76. LoadViewState (savedState);
  77. }
  78. object IStateManager.SaveViewState ()
  79. {
  80. return SaveViewState ();
  81. }
  82. void IStateManager.TrackViewState ()
  83. {
  84. TrackViewState ();
  85. }
  86. protected virtual void LoadViewState (object savedState)
  87. {
  88. object [] vs = savedState as object [];
  89. if (vs == null)
  90. return;
  91. if (vs [0] != null) ((IStateManager) deleteParameters).LoadViewState (vs [0]);
  92. if (vs [1] != null) ((IStateManager) filterParameters).LoadViewState (vs [1]);
  93. if (vs [2] != null) ((IStateManager) insertParameters).LoadViewState (vs [2]);
  94. if (vs [3] != null) ((IStateManager) selectParameters).LoadViewState (vs [3]);
  95. if (vs [4] != null) ((IStateManager) updateParameters).LoadViewState (vs [4]);
  96. if (vs [5] != null) ((IStateManager) viewState).LoadViewState (vs [5]);
  97. }
  98. protected virtual object SaveViewState ()
  99. {
  100. object [] vs = new object [6];
  101. if (deleteParameters != null) vs [0] = ((IStateManager) deleteParameters).SaveViewState ();
  102. if (filterParameters != null) vs [1] = ((IStateManager) filterParameters).SaveViewState ();
  103. if (insertParameters != null) vs [2] = ((IStateManager) insertParameters).SaveViewState ();
  104. if (selectParameters != null) vs [3] = ((IStateManager) selectParameters).SaveViewState ();
  105. if (updateParameters != null) vs [4] = ((IStateManager) updateParameters).SaveViewState ();
  106. if (viewState != null) vs [5] = ((IStateManager) viewState).SaveViewState ();
  107. foreach (object o in vs)
  108. if (o != null) return vs;
  109. return null;
  110. }
  111. protected virtual void TrackViewState ()
  112. {
  113. tracking = true;
  114. if (deleteParameters != null) ((IStateManager) deleteParameters).TrackViewState ();
  115. if (filterParameters != null) ((IStateManager) filterParameters).TrackViewState ();
  116. if (insertParameters != null) ((IStateManager) insertParameters).TrackViewState ();
  117. if (selectParameters != null) ((IStateManager) selectParameters).TrackViewState ();
  118. if (updateParameters != null) ((IStateManager) updateParameters).TrackViewState ();
  119. if (viewState != null) ((IStateManager) viewState).TrackViewState ();
  120. }
  121. protected bool IsTrackingViewState {
  122. get { return tracking; }
  123. }
  124. bool IStateManager.IsTrackingViewState {
  125. get { return IsTrackingViewState; }
  126. }
  127. public string DeleteCommand {
  128. get {
  129. string val = ViewState ["DeleteCommand"] as string;
  130. return val == null ? "" : val;
  131. }
  132. set { ViewState ["DeleteCommand"] = value; }
  133. }
  134. public string FilterExpression {
  135. get {
  136. string val = ViewState ["FilterExpression"] as string;
  137. return val == null ? "" : val;
  138. }
  139. set { ViewState ["FilterExpression"] = value; }
  140. }
  141. public string InsertCommand {
  142. get {
  143. string val = ViewState ["InsertCommand"] as string;
  144. return val == null ? "" : val;
  145. }
  146. set { ViewState ["InsertCommand"] = value; }
  147. }
  148. public string SelectCommand {
  149. get {
  150. string val = ViewState ["SelectCommand"] as string;
  151. return val == null ? "" : val;
  152. }
  153. set { ViewState ["SelectCommand"] = value; }
  154. }
  155. public string UpdateCommand {
  156. get {
  157. string val = ViewState ["UpdateCommand"] as string;
  158. return val == null ? "" : val;
  159. }
  160. set { ViewState ["UpdateCommand"] = value; }
  161. }
  162. public override string SortExpression {
  163. get {
  164. string val = ViewState ["SortExpression"] as string;
  165. return val == null ? "" : val;
  166. }
  167. set { ViewState ["SortExpression"] = value; }
  168. }
  169. public override bool CanDelete {
  170. get { return DeleteCommand != ""; }
  171. }
  172. public override bool CanInsert {
  173. get { return UpdateCommand != ""; }
  174. }
  175. public override bool CanSort {
  176. get { return owner.DataSourceMode == SqlDataSourceMode.DataSet; }
  177. }
  178. public override bool CanUpdate {
  179. get { return UpdateCommand != ""; }
  180. }
  181. EventHandlerList events;
  182. protected EventHandlerList Events {
  183. get {
  184. if (events == null)
  185. events = new EventHandlerList ();
  186. return events;
  187. }
  188. }
  189. void ParametersChanged (object source, EventArgs args)
  190. {
  191. OnDataSourceViewChanged (EventArgs.Empty);
  192. }
  193. ParameterCollection GetParameterCollection (ref ParameterCollection output)
  194. {
  195. if (output != null)
  196. return output;
  197. output = new ParameterCollection ();
  198. output.ParametersChanged += new EventHandler (ParametersChanged);
  199. if (IsTrackingViewState)
  200. ((IStateManager) output).TrackViewState ();
  201. return output;
  202. }
  203. public ParameterCollection DeleteParameters {
  204. get { return GetParameterCollection (ref deleteParameters); }
  205. }
  206. public ParameterCollection FilterParameters {
  207. get { return GetParameterCollection (ref filterParameters); }
  208. }
  209. public ParameterCollection InsertParameters {
  210. get { return GetParameterCollection (ref insertParameters); }
  211. }
  212. public ParameterCollection SelectParameters {
  213. get { return GetParameterCollection (ref selectParameters); }
  214. }
  215. public ParameterCollection UpdateParameters {
  216. get { return GetParameterCollection (ref updateParameters); }
  217. }
  218. public override string Name {
  219. get { return name; }
  220. }
  221. protected virtual string ParameterPrefix {
  222. get { return "@"; }
  223. }
  224. StateBag viewState;
  225. protected StateBag ViewState {
  226. get {
  227. if (viewState != null)
  228. return viewState;
  229. viewState = new StateBag ();
  230. if (IsTrackingViewState)
  231. viewState.TrackViewState ();
  232. return viewState;
  233. }
  234. }
  235. ParameterCollection deleteParameters;
  236. ParameterCollection filterParameters;
  237. ParameterCollection insertParameters;
  238. ParameterCollection selectParameters;
  239. ParameterCollection updateParameters;
  240. bool tracking;
  241. string name;
  242. SqlDataSource owner;
  243. static readonly object EventDataSourceViewChanged = new object ();
  244. protected virtual void OnDataSourceViewChanged (EventArgs e)
  245. {
  246. if (events == null) return;
  247. EventHandler h = events [EventDataSourceViewChanged] as EventHandler;
  248. if (h != null)
  249. h (this, e);
  250. }
  251. public event EventHandler DataSourceViewChanged {
  252. add { Events.AddHandler (EventDataSourceViewChanged, value); }
  253. remove { Events.RemoveHandler (EventDataSourceViewChanged, value); }
  254. }
  255. #region OnDelete
  256. static readonly object EventDeleted = new object ();
  257. protected virtual void OnDeleted (SqlDataSourceStatusEventArgs e)
  258. {
  259. if (events == null) return;
  260. SqlDataSourceStatusEventHandler h = events [EventDeleted] as SqlDataSourceStatusEventHandler;
  261. if (h != null)
  262. h (this, e);
  263. }
  264. public event SqlDataSourceStatusEventHandler Deleted {
  265. add { Events.AddHandler (EventDeleted, value); }
  266. remove { Events.RemoveHandler (EventDeleted, value); }
  267. }
  268. static readonly object EventDeleting = new object ();
  269. protected virtual void OnDeleting (SqlDataSourceCommandEventArgs e)
  270. {
  271. if (events == null) return;
  272. SqlDataSourceCommandEventHandler h = events [EventDeleting] as SqlDataSourceCommandEventHandler;
  273. if (h != null)
  274. h (this, e);
  275. }
  276. public event SqlDataSourceCommandEventHandler Deleting {
  277. add { Events.AddHandler (EventDeleting, value); }
  278. remove { Events.RemoveHandler (EventDeleting, value); }
  279. }
  280. #endregion
  281. #region OnInsert
  282. static readonly object EventInserted = new object ();
  283. protected virtual void OnInserted (SqlDataSourceStatusEventArgs e)
  284. {
  285. if (events == null) return;
  286. SqlDataSourceStatusEventHandler h = events [EventInserted] as SqlDataSourceStatusEventHandler;
  287. if (h != null)
  288. h (this, e);
  289. }
  290. public event SqlDataSourceStatusEventHandler Inserted {
  291. add { Events.AddHandler (EventInserted, value); }
  292. remove { Events.RemoveHandler (EventInserted, value); }
  293. }
  294. static readonly object EventInserting = new object ();
  295. protected virtual void OnInserting (SqlDataSourceCommandEventArgs e)
  296. {
  297. if (events == null) return;
  298. SqlDataSourceCommandEventHandler h = events [EventInserting] as SqlDataSourceCommandEventHandler;
  299. if (h != null)
  300. h (this, e);
  301. }
  302. public event SqlDataSourceCommandEventHandler Inserting {
  303. add { Events.AddHandler (EventInserting, value); }
  304. remove { Events.RemoveHandler (EventInserting, value); }
  305. }
  306. #endregion
  307. #region OnSelect
  308. static readonly object EventSelected = new object ();
  309. protected virtual void OnSelected (SqlDataSourceStatusEventArgs e)
  310. {
  311. if (events == null) return;
  312. SqlDataSourceStatusEventHandler h = events [EventSelected] as SqlDataSourceStatusEventHandler;
  313. if (h != null)
  314. h (this, e);
  315. }
  316. public event SqlDataSourceStatusEventHandler Selected {
  317. add { Events.AddHandler (EventSelected, value); }
  318. remove { Events.RemoveHandler (EventSelected, value); }
  319. }
  320. static readonly object EventSelecting = new object ();
  321. protected virtual void OnSelecting (SqlDataSourceCommandEventArgs e)
  322. {
  323. if (events == null) return;
  324. SqlDataSourceCommandEventHandler h = events [EventSelecting] as SqlDataSourceCommandEventHandler;
  325. if (h != null)
  326. h (this, e);
  327. }
  328. public event SqlDataSourceCommandEventHandler Selecting {
  329. add { Events.AddHandler (EventSelecting, value); }
  330. remove { Events.RemoveHandler (EventSelecting, value); }
  331. }
  332. #endregion
  333. #region OnUpdate
  334. static readonly object EventUpdated = new object ();
  335. protected virtual void OnUpdated (SqlDataSourceStatusEventArgs e)
  336. {
  337. if (events == null) return;
  338. SqlDataSourceStatusEventHandler h = events [EventUpdated] as SqlDataSourceStatusEventHandler;
  339. if (h != null)
  340. h (this, e);
  341. }
  342. public event SqlDataSourceStatusEventHandler Updated {
  343. add { Events.AddHandler (EventUpdated, value); }
  344. remove { Events.RemoveHandler (EventUpdated, value); }
  345. }
  346. static readonly object EventUpdating = new object ();
  347. protected virtual void OnUpdating (SqlDataSourceCommandEventArgs e)
  348. {
  349. if (events == null) return;
  350. SqlDataSourceCommandEventHandler h = events [EventUpdating] as SqlDataSourceCommandEventHandler;
  351. if (h != null)
  352. h (this, e);
  353. }
  354. public event SqlDataSourceCommandEventHandler Updating {
  355. add { Events.AddHandler (EventUpdating, value); }
  356. remove { Events.RemoveHandler (EventUpdating, value); }
  357. }
  358. #endregion
  359. }
  360. }
  361. #endif