2 // System.Web.UI.WebControls.TemplateField.cs
5 // Lluis Sanchez Gual (lluis@novell.com)
7 // (C) 2005 Novell, Inc. (http://www.novell.com)
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;
35 using System.Security.Permissions;
36 using System.ComponentModel;
38 namespace System.Web.UI.WebControls
40 [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
41 [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
42 public class TemplateField : DataControlField
44 ITemplate alternatingItemTemplate;
45 ITemplate editItemTemplate;
46 ITemplate footerTemplate;
47 ITemplate headerTemplate;
48 ITemplate insertItemTemplate;
49 ITemplate itemTemplate;
52 [TemplateContainer (typeof(IDataItemContainer), BindingDirection.TwoWay)]
53 [PersistenceMode (PersistenceMode.InnerProperty)]
55 public virtual ITemplate AlternatingItemTemplate {
56 get { return alternatingItemTemplate; }
57 set { alternatingItemTemplate = value; OnFieldChanged (); }
60 [DefaultValueAttribute (true)]
61 [WebCategoryAttribute ("Behavior")]
62 public virtual bool ConvertEmptyStringToNull {
64 object ob = ViewState ["ConvertEmptyStringToNull"];
65 if (ob != null) return (bool) ob;
69 ViewState ["ConvertEmptyStringToNull"] = value;
75 [TemplateContainer (typeof(IDataItemContainer), BindingDirection.TwoWay)]
76 [PersistenceMode (PersistenceMode.InnerProperty)]
78 public virtual ITemplate EditItemTemplate {
79 get { return editItemTemplate; }
80 set { editItemTemplate = value; OnFieldChanged (); }
84 [TemplateContainer (typeof(IDataItemContainer), BindingDirection.OneWay)]
85 [PersistenceMode (PersistenceMode.InnerProperty)]
87 public virtual ITemplate FooterTemplate {
88 get { return footerTemplate; }
89 set { footerTemplate = value; OnFieldChanged (); }
93 [TemplateContainer (typeof(IDataItemContainer), BindingDirection.OneWay)]
94 [PersistenceMode (PersistenceMode.InnerProperty)]
96 public virtual ITemplate HeaderTemplate {
97 get { return headerTemplate; }
98 set { headerTemplate = value; OnFieldChanged (); }
101 [DefaultValue (null)]
102 [TemplateContainer (typeof(IDataItemContainer), BindingDirection.TwoWay)]
103 [PersistenceMode (PersistenceMode.InnerProperty)]
105 public virtual ITemplate InsertItemTemplate {
106 get { return insertItemTemplate; }
107 set { insertItemTemplate = value; OnFieldChanged (); }
110 [DefaultValue (null)]
111 [TemplateContainer (typeof(IDataItemContainer), BindingDirection.TwoWay)]
112 [PersistenceMode (PersistenceMode.InnerProperty)]
114 public virtual ITemplate ItemTemplate {
115 get { return itemTemplate; }
116 set { itemTemplate = value; OnFieldChanged (); }
119 public override void InitializeCell (DataControlFieldCell cell,
120 DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
122 base.InitializeCell (cell, cellType, rowState, rowIndex);
123 if (cellType == DataControlCellType.Header) {
124 if (headerTemplate != null && ShowHeader) {
125 cell.Text = String.Empty;
126 headerTemplate.InstantiateIn (cell);
128 } else if (cellType == DataControlCellType.Footer) {
129 if (footerTemplate != null) {
130 cell.Text = String.Empty;
131 footerTemplate.InstantiateIn (cell);
134 cell.Text = String.Empty;
135 if ((rowState & DataControlRowState.Insert) != 0 &&
136 insertItemTemplate != null) {
137 insertItemTemplate.InstantiateIn (cell);
139 else if ((rowState & DataControlRowState.Edit) != 0 &&
140 editItemTemplate != null) {
141 editItemTemplate.InstantiateIn (cell);
143 else if ((rowState & DataControlRowState.Alternate) != 0 &&
144 alternatingItemTemplate != null) {
145 alternatingItemTemplate.InstantiateIn (cell);
147 else if (itemTemplate != null) {
148 itemTemplate.InstantiateIn (cell);
151 cell.Text = " ";
155 public override void ExtractValuesFromCell (IOrderedDictionary dictionary,
156 DataControlFieldCell cell, DataControlRowState rowState, bool includeReadOnly)
158 IBindableTemplate bt;
160 if ((rowState & DataControlRowState.Insert) != 0)
161 bt = insertItemTemplate as IBindableTemplate;
162 else if ((rowState & DataControlRowState.Edit) != 0)
163 bt = editItemTemplate as IBindableTemplate;
164 else if (alternatingItemTemplate !=null && (rowState & DataControlRowState.Alternate) != 0)
165 bt = alternatingItemTemplate as IBindableTemplate;
167 bt = itemTemplate as IBindableTemplate;
170 IOrderedDictionary values = bt.ExtractValues (cell);
173 foreach (DictionaryEntry e in values)
174 dictionary [e.Key] = e.Value;
178 public override void ValidateSupportsCallback ()
180 throw new NotSupportedException ("Callback not supported on TemplateField. Turn disable callbacks on '" + Control.ID + "'.");
183 protected override DataControlField CreateField ()
185 return new TemplateField ();
188 protected override void CopyProperties (DataControlField newField)
190 base.CopyProperties (newField);
191 TemplateField field = (TemplateField) newField;
192 field.AlternatingItemTemplate = AlternatingItemTemplate;
193 field.ConvertEmptyStringToNull = ConvertEmptyStringToNull;
194 field.EditItemTemplate = EditItemTemplate;
195 field.FooterTemplate = FooterTemplate;
196 field.HeaderTemplate = HeaderTemplate;
197 field.InsertItemTemplate = InsertItemTemplate;
198 field.ItemTemplate = ItemTemplate;