2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / System.Design / System.Web.UI.Design.WebControls / RepeaterDesigner.cs
1
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining
4 // a copy of this software and associated documentation files (the
5 // "Software"), to deal in the Software without restriction, including
6 // without limitation the rights to use, copy, modify, merge, publish,
7 // distribute, sublicense, and/or sell copies of the Software, and to
8 // permit persons to whom the Software is furnished to do so, subject to
9 // the following conditions:
10 // 
11 // The above copyright notice and this permission notice shall be
12 // included in all copies or substantial portions of the Software.
13 // 
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 //
22 /**
23  * Namespace:   System.Web.UI.Design.WebControls
24  * Class:       RepeaterDesigner
25  *
26  * Author:      Gaurav Vaish
27  * Maintainer:  gvaish_mono@lycos.com
28  *
29  * (C) Gaurav Vaish (2002)
30  */
31
32 using System;
33 using System.Collections;
34 using System.Data;
35 using System.Web.UI.WebControls;
36 using System.Web.UI.Design;
37
38 namespace System.Web.UI.Design.WebControls
39 {
40         public class RepeaterDesigner : ControlDesigner, IDataSourceProvider
41         {
42                 private DataTable desTimeDataTable;
43                 private DataTable dummyDataTable;
44                 private Repeater  repeater;
45
46                 public RepeaterDesigner()
47                 {
48                 }
49
50                 public string DataMember
51                 {
52                         get
53                         {
54                                 return repeater.DataMember;
55                         }
56                         set
57                         {
58                                 repeater.DataMember = value;
59                         }
60                 }
61
62                 public string DataSource
63                 {
64                         get
65                         {
66                                 DataBinding db = DataBindings["DataSource"];
67                                 if(db != null)
68                                         return db.Expression;
69                                 return String.Empty;
70                         }
71                         set
72                         {
73                                 if(value == null || value.Length == 0)
74                                 {
75                                         DataBindings.Remove("DataSource");
76                                 } else
77                                 {
78                                         DataBinding toSet = new DataBinding("DataSource",
79                                                                             typeof(IEnumerable), value);
80                                         toSet.Expression = value;
81                                         DataBindings.Add(toSet);
82                                 }
83                                 OnDataSourceChanged();
84                                 OnBindingsCollectionChanged("DataSource");
85                         }
86                 }
87
88                 public virtual void OnDataSourceChanged()
89                 {
90                         desTimeDataTable = null;
91                 }
92
93                 protected bool TemplateExists
94                 {
95                         get
96                         {
97                                 return (repeater.ItemTemplate != null ||
98                                         repeater.HeaderTemplate != null ||
99                                         repeater.FooterTemplate != null ||
100                                         repeater.AlternatingItemTemplate != null);
101                         }
102                 }
103
104                 protected IEnumerable GetDesignTimeDataSource(int minimumRows)
105                 {
106                         return GetDesignTimeDataSource(GetResolvedSelectedDataSource(),
107                                                        minimumRows);
108                 }
109
110                 protected IEnumerable GetDesignTimeDataSource(IEnumerable selectedDataSource,
111                                                               int minimumRows)
112                 {
113                         DataTable toDeploy = desTimeDataTable;
114                         if(toDeploy == null)
115                         {
116                                 if(selectedDataSource != null)
117                                 {
118                                         desTimeDataTable = DesignTimeData.CreateSampleDataTable(
119                                                                           selectedDataSource);
120                                         toDeploy = desTimeDataTable;
121                                 } else
122                                 {
123                                         if(dummyDataTable == null)
124                                                 dummyDataTable = DesignTimeData.CreateDummyDataTable();
125                                         toDeploy = dummyDataTable;
126                                 }
127                         }
128                         return DesignTimeData.GetDesignTimeDataSource(toDeploy,
129                                                                       minimumRows);
130                 }
131
132                 protected override void Dispose(bool disposing)
133                 {
134                         if(disposing)
135                                 repeater = null;
136                         base.Dispose(disposing);
137                 }
138
139                 public object GetSelectedDataSource()
140                 {
141                         object retVal = null;
142                         DataBinding db = DataBindings["DataSource"];
143                         if(db != null)
144                         {
145                                 retVal = DesignTimeData.GetSelectedDataSource(repeater, db.Expression);
146                         }
147                         return retVal;
148                 }
149
150                 public virtual IEnumerable GetResolvedSelectedDataSource()
151                 {
152                         IEnumerable retVal = null;
153                         DataBinding db = DataBindings["DataSource"];
154                         if(db != null)
155                         {
156                                 retVal = DesignTimeData.GetSelectedDataSource(repeater, db.Expression, DataMember);
157                         }
158                         return retVal;
159                 }
160         }
161 }