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