2 // System.Web.UI.WebControls.ObjectDataSource
5 // Lluis Sanchez Gual (lluis@novell.com)
7 // (C) 2005 Novell, Inc. (http://www.novell.com)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 using System.Collections;
32 using System.Collections.Specialized;
33 using System.ComponentModel;
35 using System.Security.Permissions;
38 namespace System.Web.UI.WebControls
41 [DefaultEventAttribute ("Selecting")]
42 [DefaultPropertyAttribute ("TypeName")]
43 [DesignerAttribute ("System.Web.UI.Design.WebControls.ObjectDataSourceDesigner, " + Consts.AssemblySystem_Design, "System.ComponentModel.Design.IDesigner")]
44 [ParseChildrenAttribute (true)]
45 [PersistChildrenAttribute (false)]
46 [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
47 [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
48 [ToolboxBitmap ("bitmap file goes here")]
49 public class ObjectDataSource : DataSourceControl
51 static readonly string [] emptyNames = new string [] { "DefaultView" };
52 ObjectDataSourceView defaultView;
54 int cacheDuration = 0;
55 bool enableCaching = false;
56 string cacheKeyDependency = null;
57 string sqlCacheDependency = null;
58 DataSourceCacheManager cache = null;
59 DataSourceCacheExpiry cacheExpirationPolicy = DataSourceCacheExpiry.Absolute;
61 public ObjectDataSource ()
65 public ObjectDataSource (string typeName, string selectMethod)
67 SelectMethod = selectMethod;
71 ObjectDataSourceView DefaultView {
73 if (defaultView == null) {
74 defaultView = new ObjectDataSourceView (this, emptyNames [0], Context);
75 if (IsTrackingViewState)
76 ((IStateManager) defaultView).TrackViewState ();
82 public event ObjectDataSourceStatusEventHandler Deleted {
83 add { DefaultView.Deleted += value; }
84 remove { DefaultView.Deleted -= value; }
87 public event ObjectDataSourceMethodEventHandler Deleting {
88 add { DefaultView.Deleting += value; }
89 remove { DefaultView.Deleting -= value; }
92 public event ObjectDataSourceFilteringEventHandler Filtering {
93 add { DefaultView.Filtering += value; }
94 remove { DefaultView.Filtering -= value; }
97 public event ObjectDataSourceStatusEventHandler Inserted {
98 add { DefaultView.Inserted += value; }
99 remove { DefaultView.Inserted -= value; }
102 public event ObjectDataSourceMethodEventHandler Inserting {
103 add { DefaultView.Inserting += value; }
104 remove { DefaultView.Inserting -= value; }
107 public event ObjectDataSourceObjectEventHandler ObjectCreated {
108 add { DefaultView.ObjectCreated += value; }
109 remove { DefaultView.ObjectCreated -= value; }
112 public event ObjectDataSourceObjectEventHandler ObjectCreating {
113 add { DefaultView.ObjectCreating += value; }
114 remove { DefaultView.ObjectCreating -= value; }
117 public event ObjectDataSourceDisposingEventHandler ObjectDisposing {
118 add { DefaultView.ObjectDisposing += value; }
119 remove { DefaultView.ObjectDisposing -= value; }
122 /* public event ObjectDataSourceResolvingMethodEventHandler ResolvingMethod {
123 add { DefaultView.ResolvingMethod += value; }
124 remove { DefaultView.ResolvingMethod -= value; }
127 public event ObjectDataSourceStatusEventHandler Selected {
128 add { DefaultView.Selected += value; }
129 remove { DefaultView.Selected -= value; }
132 public event ObjectDataSourceSelectingEventHandler Selecting {
133 add { DefaultView.Selecting += value; }
134 remove { DefaultView.Selecting -= value; }
137 public event ObjectDataSourceStatusEventHandler Updated {
138 add { DefaultView.Updated += value; }
139 remove { DefaultView.Updated -= value; }
142 public event ObjectDataSourceMethodEventHandler Updating {
143 add { DefaultView.Updating += value; }
144 remove { DefaultView.Updating -= value; }
148 [TypeConverter (typeof (DataSourceCacheDurationConverter))]
149 public virtual int CacheDuration
152 return cacheDuration;
156 throw new ArgumentOutOfRangeException ("value", "The duration must be non-negative");
158 cacheDuration = value;
162 [DefaultValue (DataSourceCacheExpiry.Absolute)]
163 public virtual DataSourceCacheExpiry CacheExpirationPolicy
166 return cacheExpirationPolicy;
169 cacheExpirationPolicy = value;
174 public virtual string CacheKeyDependency
177 return cacheKeyDependency != null ? cacheKeyDependency : string.Empty;
180 cacheKeyDependency = value;
184 [WebCategoryAttribute ("Data")]
185 [DefaultValueAttribute (ConflictOptions.OverwriteChanges)]
186 public ConflictOptions ConflictDetection {
187 get { return DefaultView.ConflictDetection; }
188 set { DefaultView.ConflictDetection = value; }
191 [DefaultValue (false)]
192 public bool ConvertNullToDBNull
195 return DefaultView.ConvertNullToDBNull;
198 DefaultView.ConvertNullToDBNull = value;
202 [WebCategoryAttribute ("Data")]
203 [DefaultValueAttribute ("")]
204 public string DataObjectTypeName {
205 get { return DefaultView.DataObjectTypeName; }
206 set { DefaultView.DataObjectTypeName = value; }
209 [WebCategoryAttribute ("Data")]
210 [DefaultValueAttribute ("")]
211 public string DeleteMethod {
212 get { return DefaultView.DeleteMethod; }
213 set { DefaultView.DeleteMethod = value; }
216 [WebCategoryAttribute ("Data")]
217 [MergablePropertyAttribute (false)]
218 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
219 [DefaultValueAttribute (null)]
220 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
221 public ParameterCollection DeleteParameters {
222 get { return DefaultView.DeleteParameters; }
225 [DefaultValue (false)]
226 public virtual bool EnableCaching {
227 get { return enableCaching; }
228 set { enableCaching = value; }
231 [WebCategoryAttribute ("Paging")]
232 [DefaultValueAttribute (false)]
233 public bool EnablePaging {
234 get { return DefaultView.EnablePaging; }
235 set { DefaultView.EnablePaging = value; }
238 [WebCategoryAttribute ("Data")]
239 [DefaultValueAttribute ("")]
240 public string FilterExpression {
241 get { return DefaultView.FilterExpression; }
242 set { DefaultView.FilterExpression = value; }
245 [WebCategoryAttribute ("Data")]
246 [MergablePropertyAttribute (false)]
247 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
248 [DefaultValueAttribute (null)]
249 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
250 public ParameterCollection FilterParameters {
251 get { return DefaultView.FilterParameters; }
254 [DefaultValueAttribute ("")]
255 [WebCategoryAttribute ("Data")]
256 public string InsertMethod {
257 get { return DefaultView.InsertMethod; }
258 set { DefaultView.InsertMethod = value; }
261 [WebCategoryAttribute ("Data")]
262 [MergablePropertyAttribute (false)]
263 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
264 [DefaultValueAttribute (null)]
265 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
266 public ParameterCollection InsertParameters {
267 get { return DefaultView.InsertParameters; }
270 [WebCategoryAttribute ("Paging")]
271 [DefaultValueAttribute ("maximumRows")]
272 public string MaximumRowsParameterName {
273 get { return DefaultView.MaximumRowsParameterName; }
274 set { DefaultView.MaximumRowsParameterName = value; }
277 [WebCategoryAttribute ("Data")]
278 [DefaultValueAttribute ("{0}")]
279 public string OldValuesParameterFormatString {
280 get { return DefaultView.OldValuesParameterFormatString; }
281 set { DefaultView.OldValuesParameterFormatString = value; }
284 [WebCategoryAttribute ("Paging")]
285 [DefaultValueAttribute ("")]
286 public string SelectCountMethod {
287 get { return DefaultView.SelectCountMethod; }
288 set { DefaultView.SelectCountMethod = value; }
291 [DefaultValueAttribute ("")]
292 [WebCategoryAttribute ("Data")]
293 public string SelectMethod {
294 get { return DefaultView.SelectMethod; }
295 set { DefaultView.SelectMethod = value; }
298 [WebCategoryAttribute ("Data")]
299 [MergablePropertyAttribute (false)]
300 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
301 [DefaultValueAttribute (null)]
302 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
303 public ParameterCollection SelectParameters {
304 get { return DefaultView.SelectParameters; }
307 [DefaultValueAttribute ("")]
308 [WebCategoryAttribute ("Data")]
309 public string SortParameterName {
310 get { return DefaultView.SortParameterName; }
311 set { DefaultView.SortParameterName = value; }
314 [MonoTODO ("SQLServer specific")]
316 public virtual string SqlCacheDependency {
317 get { return sqlCacheDependency != null ? sqlCacheDependency : string.Empty; }
318 set { sqlCacheDependency = value; }
321 [WebCategoryAttribute ("Paging")]
322 [DefaultValueAttribute ("startRowIndex")]
323 public string StartRowIndexParameterName {
324 get { return DefaultView.StartRowIndexParameterName; }
325 set { DefaultView.StartRowIndexParameterName = value; }
328 [DefaultValueAttribute ("")]
329 [WebCategoryAttribute ("Data")]
330 public string TypeName {
331 get { return DefaultView.TypeName; }
332 set { DefaultView.TypeName = value; }
335 [DefaultValueAttribute ("")]
336 [WebCategoryAttribute ("Data")]
337 public string UpdateMethod {
338 get { return DefaultView.UpdateMethod; }
339 set { DefaultView.UpdateMethod = value; }
342 [WebCategoryAttribute ("Data")]
343 [MergablePropertyAttribute (false)]
344 [EditorAttribute ("System.Web.UI.Design.WebControls.ParameterCollectionEditor, " + Consts.AssemblySystem_Design, "System.Drawing.Design.UITypeEditor, " + Consts.AssemblySystem_Drawing)]
345 [DefaultValueAttribute (null)]
346 [PersistenceModeAttribute (PersistenceMode.InnerProperty)]
347 public ParameterCollection UpdateParameters {
348 get { return DefaultView.UpdateParameters; }
351 internal DataSourceCacheManager Cache {
354 cache = new DataSourceCacheManager (CacheDuration, CacheKeyDependency, CacheExpirationPolicy, this, Context);
359 protected override DataSourceView GetView (string viewName)
361 if (viewName == null)
362 throw new ArgumentException ("viewName");
367 protected override ICollection GetViewNames ()
372 public IEnumerable Select ()
374 return DefaultView.Select (DataSourceSelectArguments.Empty);
379 Hashtable empty = new Hashtable ();
380 return DefaultView.Update (empty, empty, null);
385 Hashtable empty = new Hashtable ();
386 return DefaultView.Delete (empty, null);
391 Hashtable empty = new Hashtable ();
392 return DefaultView.Insert (empty);
395 protected internal override void OnInit (EventArgs e)
397 Page.LoadComplete += OnPageLoadComplete;
400 void OnPageLoadComplete (object sender, EventArgs e)
402 FilterParameters.UpdateValues (Context, this);
403 SelectParameters.UpdateValues (Context, this);
406 protected override void LoadViewState (object savedState)
408 if (savedState == null) {
409 base.LoadViewState (null);
410 ((IStateManager)DefaultView).LoadViewState (null);
412 Pair p = (Pair) savedState;
413 base.LoadViewState (p.First);
414 ((IStateManager)DefaultView).LoadViewState (p.Second);
418 protected override object SaveViewState()
420 object baseState = base.SaveViewState ();
421 object viewState = ((IStateManager)DefaultView).SaveViewState ();
422 if (baseState != null || viewState != null) return new Pair (baseState, viewState);
426 protected override void TrackViewState()
428 ((IStateManager)DefaultView).TrackViewState ();