200-112-18 Gaurav Vaish <Gvaish@iitk.ac.in>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / BaseDataList.cs
1 /**\r
2  * Namespace: System.Web.UI.WebControls\r
3  * Class:     BaseDataList\r
4  *\r
5  * Author:  Gaurav Vaish\r
6  * Maintainer: gvaish@iitk.ac.in\r
7  * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
8  * Implementation: yes\r
9  * Status:  100%\r
10  *\r
11  * (C) Gaurav Vaish (2001)\r
12  */\r
13 \r
14 using System;\r
15 using System.Collections;\r
16 using System.Web;\r
17 using System.Web.UI;\r
18 \r
19 namespace System.Web.UI.WebControls\r
20 {\r
21         public abstract class BaseDataList: WebControl\r
22         {\r
23                 private  static readonly object SelectedIndexChangedEvent = new object();\r
24                 internal static string          ItemCountViewStateKey     = "_!ItemCount";\r
25                 \r
26                 private DataKeyCollection dataKeys;\r
27                 private object            dataSource;\r
28                 \r
29                 public BaseDataList() : base();\r
30                 {\r
31                 }\r
32 \r
33                 public static bool IsBindableType(Type type)\r
34                 {\r
35                         if(type.IsPrimitive || type == typeof(string) || type == typeof(DateTime) || type == typeof(Decimal))\r
36                                 return true;\r
37                         return false;\r
38                 }\r
39                 \r
40                 public override void DataBind()\r
41                 {\r
42                         OnDataBinding(EventArgs.Empty);\r
43                 }\r
44                 \r
45                 public event EventHandler SelectedIndexChanged\r
46                 {\r
47                         add\r
48                         {\r
49                                 Events.AddHandler(SelectedIndexChangedEvent, value);\r
50                         }\r
51                         remove\r
52                         {\r
53                                 Events.RemoveHandler(SelectedIndexChangedEvent, value);\r
54                         }\r
55                 }\r
56                 \r
57                 public virtual int CellPadding\r
58                 {\r
59                         get\r
60                         {\r
61                                 if(!ControlStyleCreated)\r
62                                         retrurn -1;\r
63                                 return ((TableStyle)ControlStyle).CellPadding;\r
64                         }\r
65                         set\r
66                         {\r
67                                 ((TableStyle)ControlStyle).CellPadding = value;\r
68                         }\r
69                 }\r
70                 \r
71                 public virtual int CellSpacing\r
72                 {\r
73                         get\r
74                         {\r
75                                 if(!ControlStyleCreated)\r
76                                         retrurn -1;\r
77                                 return ((TableStyle)ControlStyle).CellSpacing;\r
78                         }\r
79                         set\r
80                         {\r
81                                 ((TableStyle)ControlStyle).CellSpacing = value;\r
82                         }\r
83                 }\r
84                 \r
85                 public virtual string DataKeyField\r
86                 {\r
87                         get\r
88                         {\r
89                                 object o = ViewState["DataKeyField"];\r
90                                 if(o!=null)\r
91                                         return (string)o;\r
92                                 return String.Empty;\r
93                         }\r
94                         set\r
95                         {\r
96                                 ViewState["DataKeyField"] = value;\r
97                         }\r
98                 }\r
99                 \r
100                 public DataKeyCollection DataKeys\r
101                 {\r
102                         get\r
103                         {\r
104                                 if( !(dataKeys) )\r
105                                         dataKeys = new DataKeyCollection(DataKeysArray);\r
106                                 return dataKeys;\r
107                                 \r
108                         }\r
109                 }\r
110                 \r
111                 public string DataMember\r
112                 {\r
113                         get\r
114                         {\r
115                                 object o = ViewState["DataMember"];\r
116                                 if(o!=null)\r
117                                         return (string)o;\r
118                                 return String.Empty;\r
119                         }\r
120                         set\r
121                         {\r
122                                 ViewState["DataMember"] = value;\r
123                         }\r
124                 }\r
125                 \r
126                 public virtual object DataSource\r
127                 {\r
128                         get\r
129                         {\r
130                                 return dataSource;\r
131                         }\r
132                         set\r
133                         {\r
134                                 if( (value) && ( value is IListSource || value is IEnumerable) )\r
135                                 {\r
136                                         dataSource = value;\r
137                                 } else\r
138                                 {\r
139                                         throw new ArgumentException(HttpRuntime.FormatResourceString("Invalid_DataSource_Type", ID));\r
140                                 }\r
141                         }\r
142                 }\r
143 \r
144                 public virtual GridLines GridLines\r
145                 {\r
146                         get\r
147                         {\r
148                                 if(ControlStyleCreated)\r
149                                         return ((TableStyle)ControlStyle).GridLines;\r
150                                 return GridLines.Both;\r
151                         }\r
152                         set\r
153                         {\r
154                                 ((TableStyle)ControlStyle).GridLines = value;\r
155                         }\r
156                 }\r
157                 \r
158                 public virtual HorizontalAlign HorizontalAlign\r
159                 {\r
160                         get\r
161                         {\r
162                                 if(ControlStyleCreated)\r
163                                         return ((TableStyle)ControlStyle).HorizontalAlign;\r
164                                 return HorizontalAlign.NotSet;\r
165                         }\r
166                         set\r
167                         {\r
168                                 ((TableStyle)ControlStyle).HorizontalAlign = value;\r
169                         }\r
170                 }\r
171                 \r
172                 protected ArrayList DataKeysArray\r
173                 {\r
174                         get\r
175                         {\r
176                                 object o = ViewState["DataKeys"];\r
177                                 if(o == null)\r
178                                 {\r
179                                         o = new ArrayList();\r
180                                         ViewState["DataKeys"] = o;\r
181                                 }\r
182                                 return (ArrayList)o;\r
183                         }\r
184                 }\r
185                 \r
186                 protected override void AddParsedSubObject(object o)\r
187                 {\r
188                         // Preventing literal controls from being added as children.\r
189                 }\r
190 \r
191                 protected override void CreateChildControls()\r
192                 {\r
193                         Controls.Clear();\r
194                         if(ViewState[ItemCountViewStateKey]!=null)\r
195                         {\r
196                                 CreateControlHierarchy(true);\r
197                                 ClearChildViewState();\r
198                         }\r
199                 }\r
200                 \r
201                 protected override void OnDataBinding(EventArgs e)\r
202                 {\r
203                         base.OnDataBinding(e);\r
204                         Controls.Clear();\r
205                         ClearChildViewState();\r
206                         CreateControlHierarchy(true);\r
207                         ChildControlsCreated = true;\r
208                         TrackViewState();\r
209                 }\r
210                 \r
211                 protected virtual void OnSelectedIndexChanged(EventArgs e)\r
212                 {\r
213                         if(Events != null)\r
214                         {\r
215                                 EventHandler eh = (EventHandler)(Events[SelectedIndexChangedEvent]);\r
216                                 if(eh!=null)\r
217                                         eh(this, e);\r
218                         }\r
219                 }\r
220                 \r
221                 protected override void Render(HtmlTextWriter writer)\r
222                 {\r
223                         PrepareControlHierarchy();\r
224                         base.RenderContents(writer);\r
225                 }\r
226                 \r
227                 protected abstract void PrepareControlHierarchy();\r
228                 protected abstract void CreateControlHierarchy(bool useDataSource);\r
229         }\r
230 }\r