2 * Namespace: System.Web.UI.WebControls
\r
3 * Class: BaseDataList
\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
11 * (C) Gaurav Vaish (2001)
\r
15 using System.ComponentModel;
\r
16 using System.Collections;
\r
18 using System.Web.UI;
\r
20 namespace System.Web.UI.WebControls
\r
22 [DefaultEvent("SelectedIndexChanged")]
\r
23 [DefaultProperty("DataSource")]
\r
24 [ParseChildren(true)]
\r
25 [PersistChildren(false)]
\r
26 //TODO: [Designer("??")]
\r
27 public abstract class BaseDataList: WebControl
\r
29 private static readonly object SelectedIndexChangedEvent = new object();
\r
30 internal static string ItemCountViewStateKey = "_!ItemCount";
\r
32 private DataKeyCollection dataKeys;
\r
33 private object dataSource;
\r
35 public BaseDataList() : base()
\r
39 public static bool IsBindableType(Type type)
\r
41 if(type.IsPrimitive || type == typeof(string) || type == typeof(DateTime) || type == typeof(Decimal))
\r
46 public override ControlCollection Controls
\r
50 EnsureChildControls();
\r
51 return base.Controls;
\r
55 public override void DataBind()
\r
57 OnDataBinding(EventArgs.Empty);
\r
60 [WebCategory("Action")]
\r
61 [WebSysDescription("BaseDataList_OnSelectedIndexChanged")]
\r
62 public event EventHandler SelectedIndexChanged
\r
66 Events.AddHandler(SelectedIndexChangedEvent, value);
\r
70 Events.RemoveHandler(SelectedIndexChangedEvent, value);
\r
76 [WebCategory("Layout")]
\r
77 [WebSysDescription("BaseDataList_CellPadding")]
\r
78 public virtual int CellPadding
\r
82 if(!ControlStyleCreated)
\r
84 return ((TableStyle)ControlStyle).CellPadding;
\r
88 ((TableStyle)ControlStyle).CellPadding = value;
\r
94 [WebCategory("Layout")]
\r
95 [WebSysDescription("BaseDataList_CellSpacing")]
\r
96 public virtual int CellSpacing
\r
100 if(!ControlStyleCreated)
\r
102 return ((TableStyle)ControlStyle).CellSpacing;
\r
106 ((TableStyle)ControlStyle).CellSpacing = value;
\r
111 [WebCategory("Data")]
\r
112 [WebSysDescription("BaseDataList_DataKeyField")]
\r
113 public virtual string DataKeyField
\r
117 object o = ViewState["DataKeyField"];
\r
120 return String.Empty;
\r
124 ViewState["DataKeyField"] = value;
\r
129 //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
\r
130 [WebSysDescription("BaseDataList_DataKeys")]
\r
131 public DataKeyCollection DataKeys
\r
135 if( dataKeys==null )
\r
136 dataKeys = new DataKeyCollection(DataKeysArray);
\r
143 [WebCategory("Data")]
\r
144 [WebSysDescription("BaseDataList_DataMember")]
\r
145 public string DataMember
\r
149 object o = ViewState["DataMember"];
\r
152 return String.Empty;
\r
156 ViewState["DataMember"] = value;
\r
161 [DefaultValue(null)]
\r
162 //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
\r
163 [WebCategory("Data")]
\r
164 [WebSysDescription("BaseDataList_DataSource")]
\r
165 public virtual object DataSource
\r
173 if( (value!=null) && (value is IListSource || value is IEnumerable) )
\r
175 dataSource = value;
\r
178 throw new ArgumentException(HttpRuntime.FormatResourceString("Invalid_DataSource_Type", ID));
\r
184 [DefaultValue(GridLines.Both)]
\r
185 [WebCategory("Appearance")]
\r
186 [WebSysDescription("BaseDataList_GridLines")]
\r
187 public virtual GridLines GridLines
\r
191 if(ControlStyleCreated)
\r
192 return ((TableStyle)ControlStyle).GridLines;
\r
193 return GridLines.Both;
\r
197 ((TableStyle)ControlStyle).GridLines = value;
\r
202 [DefaultValue(HorizontalAlign.NotSet)]
\r
203 [WebCategory("Layout")]
\r
204 [WebSysDescription("BaseDataList_HorizontalAlign")]
\r
205 public virtual HorizontalAlign HorizontalAlign
\r
209 if(ControlStyleCreated)
\r
210 return ((TableStyle)ControlStyle).HorizontalAlign;
\r
211 return HorizontalAlign.NotSet;
\r
215 ((TableStyle)ControlStyle).HorizontalAlign = value;
\r
219 protected ArrayList DataKeysArray
\r
223 object o = ViewState["DataKeys"];
\r
226 o = new ArrayList();
\r
227 ViewState["DataKeys"] = o;
\r
229 return (ArrayList)o;
\r
233 protected override void AddParsedSubObject(object o)
\r
235 // Preventing literal controls from being added as children.
\r
238 protected override void CreateChildControls()
\r
241 if(ViewState[ItemCountViewStateKey]!=null)
\r
243 CreateControlHierarchy(true);
\r
244 ClearChildViewState();
\r
248 protected override void OnDataBinding(EventArgs e)
\r
250 base.OnDataBinding(e);
\r
252 ClearChildViewState();
\r
253 CreateControlHierarchy(true);
\r
254 ChildControlsCreated = true;
\r
258 protected virtual void OnSelectedIndexChanged(EventArgs e)
\r
262 EventHandler eh = (EventHandler)(Events[SelectedIndexChangedEvent]);
\r
268 protected override void Render(HtmlTextWriter writer)
\r
270 PrepareControlHierarchy();
\r
271 base.RenderContents(writer);
\r
274 protected abstract void PrepareControlHierarchy();
\r
275 protected abstract void CreateControlHierarchy(bool useDataSource);
\r