2 // System.Web.UI.WebControls.SqlDataSourceView
5 // Ben Maurer (bmaurer@users.sourceforge.net)
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.
32 using System.Collections;
33 using System.Collections.Specialized;
36 using System.ComponentModel;
38 namespace System.Web.UI.WebControls {
39 public class SqlDataSourceView : DataSourceView, IStateManager {
41 public SqlDataSourceView (SqlDataSource owner, string name)
53 public override int Delete (IDictionary parameters)
55 throw new NotImplementedException ();
64 public override int Insert (IDictionary values)
66 throw new NotImplementedException ();
70 public override IEnumerable Select ()
72 throw new NotImplementedException ();
77 return Update (null, null);
81 public override int Update (IDictionary parameters, IDictionary values)
83 throw new NotImplementedException ();
86 void IStateManager.LoadViewState (object savedState)
88 LoadViewState (savedState);
91 object IStateManager.SaveViewState ()
93 return SaveViewState ();
96 void IStateManager.TrackViewState ()
101 protected virtual void LoadViewState (object savedState)
103 object [] vs = savedState as object [];
107 if (vs [0] != null) ((IStateManager) deleteParameters).LoadViewState (vs [0]);
108 if (vs [1] != null) ((IStateManager) filterParameters).LoadViewState (vs [1]);
109 if (vs [2] != null) ((IStateManager) insertParameters).LoadViewState (vs [2]);
110 if (vs [3] != null) ((IStateManager) selectParameters).LoadViewState (vs [3]);
111 if (vs [4] != null) ((IStateManager) updateParameters).LoadViewState (vs [4]);
112 if (vs [5] != null) ((IStateManager) viewState).LoadViewState (vs [5]);
115 protected virtual object SaveViewState ()
117 object [] vs = new object [6];
119 if (deleteParameters != null) vs [0] = ((IStateManager) deleteParameters).SaveViewState ();
120 if (filterParameters != null) vs [1] = ((IStateManager) filterParameters).SaveViewState ();
121 if (insertParameters != null) vs [2] = ((IStateManager) insertParameters).SaveViewState ();
122 if (selectParameters != null) vs [3] = ((IStateManager) selectParameters).SaveViewState ();
123 if (updateParameters != null) vs [4] = ((IStateManager) updateParameters).SaveViewState ();
124 if (viewState != null) vs [5] = ((IStateManager) viewState).SaveViewState ();
126 foreach (object o in vs)
127 if (o != null) return vs;
131 protected virtual void TrackViewState ()
135 if (deleteParameters != null) ((IStateManager) deleteParameters).TrackViewState ();
136 if (filterParameters != null) ((IStateManager) filterParameters).TrackViewState ();
137 if (insertParameters != null) ((IStateManager) insertParameters).TrackViewState ();
138 if (selectParameters != null) ((IStateManager) selectParameters).TrackViewState ();
139 if (updateParameters != null) ((IStateManager) updateParameters).TrackViewState ();
140 if (viewState != null) ((IStateManager) viewState).TrackViewState ();
143 protected bool IsTrackingViewState {
144 get { return tracking; }
147 bool IStateManager.IsTrackingViewState {
148 get { return IsTrackingViewState; }
151 public string DeleteCommand {
153 string val = ViewState ["DeleteCommand"] as string;
154 return val == null ? "" : val;
156 set { ViewState ["DeleteCommand"] = value; }
159 public string FilterExpression {
161 string val = ViewState ["FilterExpression"] as string;
162 return val == null ? "" : val;
164 set { ViewState ["FilterExpression"] = value; }
167 public string InsertCommand {
169 string val = ViewState ["InsertCommand"] as string;
170 return val == null ? "" : val;
172 set { ViewState ["InsertCommand"] = value; }
175 public string SelectCommand {
177 string val = ViewState ["SelectCommand"] as string;
178 return val == null ? "" : val;
180 set { ViewState ["SelectCommand"] = value; }
183 public string UpdateCommand {
185 string val = ViewState ["UpdateCommand"] as string;
186 return val == null ? "" : val;
188 set { ViewState ["UpdateCommand"] = value; }
191 public override string SortExpression {
193 string val = ViewState ["SortExpression"] as string;
194 return val == null ? "" : val;
196 set { ViewState ["SortExpression"] = value; }
199 public override bool CanDelete {
200 get { return DeleteCommand != ""; }
203 public override bool CanInsert {
204 get { return UpdateCommand != ""; }
207 public override bool CanSort {
208 get { return owner.DataSourceMode == SqlDataSourceMode.DataSet; }
211 public override bool CanUpdate {
212 get { return UpdateCommand != ""; }
215 EventHandlerList events;
216 protected EventHandlerList Events {
219 events = new EventHandlerList ();
225 void ParametersChanged (object source, EventArgs args)
227 OnDataSourceViewChanged (EventArgs.Empty);
230 ParameterCollection GetParameterCollection (ref ParameterCollection output)
235 output = new ParameterCollection ();
236 output.ParametersChanged += new EventHandler (ParametersChanged);
238 if (IsTrackingViewState)
239 ((IStateManager) output).TrackViewState ();
244 public ParameterCollection DeleteParameters {
245 get { return GetParameterCollection (ref deleteParameters); }
248 public ParameterCollection FilterParameters {
249 get { return GetParameterCollection (ref filterParameters); }
252 public ParameterCollection InsertParameters {
253 get { return GetParameterCollection (ref insertParameters); }
256 public ParameterCollection SelectParameters {
257 get { return GetParameterCollection (ref selectParameters); }
260 public ParameterCollection UpdateParameters {
261 get { return GetParameterCollection (ref updateParameters); }
265 public override string Name {
269 protected virtual string ParameterPrefix {
274 protected StateBag ViewState {
276 if (viewState != null)
279 viewState = new StateBag ();
280 if (IsTrackingViewState)
281 viewState.TrackViewState ();
287 ParameterCollection deleteParameters;
288 ParameterCollection filterParameters;
289 ParameterCollection insertParameters;
290 ParameterCollection selectParameters;
291 ParameterCollection updateParameters;
298 static readonly object EventDataSourceViewChanged = new object ();
300 protected virtual void OnDataSourceViewChanged (EventArgs e)
302 if (events == null) return;
303 EventHandler h = events [EventDataSourceViewChanged] as EventHandler;
308 public event EventHandler DataSourceViewChanged {
309 add { Events.AddHandler (EventDataSourceViewChanged, value); }
310 remove { Events.RemoveHandler (EventDataSourceViewChanged, value); }
314 static readonly object EventDeleted = new object ();
315 protected virtual void OnDeleted (SqlDataSourceStatusEventArgs e)
317 if (events == null) return;
318 SqlDataSourceStatusEventHandler h = events [EventDeleted] as SqlDataSourceStatusEventHandler;
323 public event SqlDataSourceStatusEventHandler Deleted {
324 add { Events.AddHandler (EventDeleted, value); }
325 remove { Events.RemoveHandler (EventDeleted, value); }
328 static readonly object EventDeleting = new object ();
329 protected virtual void OnDeleting (SqlDataSourceCommandEventArgs e)
331 if (events == null) return;
332 SqlDataSourceCommandEventHandler h = events [EventDeleting] as SqlDataSourceCommandEventHandler;
336 public event SqlDataSourceCommandEventHandler Deleting {
337 add { Events.AddHandler (EventDeleting, value); }
338 remove { Events.RemoveHandler (EventDeleting, value); }
343 static readonly object EventInserted = new object ();
344 protected virtual void OnInserted (SqlDataSourceStatusEventArgs e)
346 if (events == null) return;
347 SqlDataSourceStatusEventHandler h = events [EventInserted] as SqlDataSourceStatusEventHandler;
352 public event SqlDataSourceStatusEventHandler Inserted {
353 add { Events.AddHandler (EventInserted, value); }
354 remove { Events.RemoveHandler (EventInserted, value); }
357 static readonly object EventInserting = new object ();
358 protected virtual void OnInserting (SqlDataSourceCommandEventArgs e)
360 if (events == null) return;
361 SqlDataSourceCommandEventHandler h = events [EventInserting] as SqlDataSourceCommandEventHandler;
365 public event SqlDataSourceCommandEventHandler Inserting {
366 add { Events.AddHandler (EventInserting, value); }
367 remove { Events.RemoveHandler (EventInserting, value); }
372 static readonly object EventSelected = new object ();
373 protected virtual void OnSelected (SqlDataSourceStatusEventArgs e)
375 if (events == null) return;
376 SqlDataSourceStatusEventHandler h = events [EventSelected] as SqlDataSourceStatusEventHandler;
381 public event SqlDataSourceStatusEventHandler Selected {
382 add { Events.AddHandler (EventSelected, value); }
383 remove { Events.RemoveHandler (EventSelected, value); }
386 static readonly object EventSelecting = new object ();
387 protected virtual void OnSelecting (SqlDataSourceCommandEventArgs e)
389 if (events == null) return;
390 SqlDataSourceCommandEventHandler h = events [EventSelecting] as SqlDataSourceCommandEventHandler;
394 public event SqlDataSourceCommandEventHandler Selecting {
395 add { Events.AddHandler (EventSelecting, value); }
396 remove { Events.RemoveHandler (EventSelecting, value); }
401 static readonly object EventUpdated = new object ();
402 protected virtual void OnUpdated (SqlDataSourceStatusEventArgs e)
404 if (events == null) return;
405 SqlDataSourceStatusEventHandler h = events [EventUpdated] as SqlDataSourceStatusEventHandler;
410 public event SqlDataSourceStatusEventHandler Updated {
411 add { Events.AddHandler (EventUpdated, value); }
412 remove { Events.RemoveHandler (EventUpdated, value); }
415 static readonly object EventUpdating = new object ();
416 protected virtual void OnUpdating (SqlDataSourceCommandEventArgs e)
418 if (events == null) return;
419 SqlDataSourceCommandEventHandler h = events [EventUpdating] as SqlDataSourceCommandEventHandler;
423 public event SqlDataSourceCommandEventHandler Updating {
424 add { Events.AddHandler (EventUpdating, value); }
425 remove { Events.RemoveHandler (EventUpdating, value); }