2004-06-29 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / TemplateColumn.cs
1 //
2 // System.Web.UI.WebControls.TemplateColumn.cs
3 //
4 // Authors:
5 //   Gaurav Vaish (gvaish@iitk.ac.in)
6 //   Andreas Nahr (ClassDevelopment@A-SoftTech.com)
7 //
8 // (C) Gaurav Vaish (2002)
9 // (C) 2003 Andreas Nahr
10 //\r
11
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 // 
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 // 
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 //
32 \r
33 \r
34 using System;
35 using System.ComponentModel;\r
36 using System.Web;\r
37 using System.Web.UI;\r
38 \r
39 namespace System.Web.UI.WebControls\r
40 {\r
41         public class TemplateColumn : DataGridColumn\r
42         {\r
43                 private ITemplate editItemTemplate;\r
44                 private ITemplate footerTemplate;\r
45                 private ITemplate headerTemplate;\r
46                 private ITemplate itemTemplate;\r
47 \r
48                 public TemplateColumn(): base()\r
49                 {\r
50                 }\r
51
52                 [DefaultValue (null), Browsable (false)]
53                 [PersistenceMode (PersistenceMode.InnerProperty), TemplateContainer (typeof (DataGridItem))]
54                 [WebSysDescription ("The template that is used to build that are being edited rows for this column.")]\r
55                 public virtual ITemplate EditItemTemplate\r
56                 {\r
57                         get\r
58                         {\r
59                                 return editItemTemplate;\r
60                         }\r
61                         set\r
62                         {\r
63                                 editItemTemplate = value;\r
64                                 OnColumnChanged();\r
65                         }\r
66                 }\r
67
68                 [DefaultValue (null), Browsable (false)]
69                 [PersistenceMode (PersistenceMode.InnerProperty), TemplateContainer (typeof (DataGridItem))]
70                 [WebSysDescription ("The template that is used to build the footer for this column.")]\r
71                 public virtual ITemplate FooterTemplate\r
72                 {\r
73                         get\r
74                         {\r
75                                 return footerTemplate;\r
76                         }\r
77                         set\r
78                         {\r
79                                 footerTemplate = value;\r
80                                 OnColumnChanged();\r
81                         }\r
82                 }\r
83
84                 [DefaultValue (null), Browsable (false)]
85                 [PersistenceMode (PersistenceMode.InnerProperty), TemplateContainer (typeof (DataGridItem))]
86                 [WebSysDescription ("The template that is used to build the header for this column.")]\r
87                 public virtual ITemplate HeaderTemplate\r
88                 {\r
89                         get\r
90                         {\r
91                                 return headerTemplate;\r
92                         }\r
93                         set\r
94                         {\r
95                                 headerTemplate = value;\r
96                                 OnColumnChanged();\r
97                         }\r
98                 }\r
99
100                 [DefaultValue (null), Browsable (false)]
101                 [PersistenceMode (PersistenceMode.InnerProperty), TemplateContainer (typeof (DataGridItem))]
102                 [WebSysDescription ("The template that is used to build rows for this column.")]\r
103                 public virtual ITemplate ItemTemplate\r
104                 {\r
105                         get\r
106                         {\r
107                                 return itemTemplate;\r
108                         }\r
109                         set\r
110                         {\r
111                                 itemTemplate = value;\r
112                                 OnColumnChanged();\r
113                         }\r
114                 }\r
115 \r
116                 public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType)\r
117                 {\r
118                         base.InitializeCell(cell, columnIndex, itemType);\r
119                         ITemplate toRender = null;\r
120                         switch(itemType)\r
121                         {\r
122                                 case ListItemType.Header: toRender = headerTemplate;\r
123                                                           break;\r
124                                 case ListItemType.Footer: toRender = footerTemplate;\r
125                                                           break;\r
126                                 case ListItemType.SelectedItem:
127                                 case ListItemType.AlternatingItem:
128                                 case ListItemType.Item:   toRender = itemTemplate;\r
129                                                           break;
130                                 case ListItemType.EditItem:
131                                         toRender = (editItemTemplate != null ? editItemTemplate : itemTemplate);\r
132                                                           break;\r
133                         }\r
134                         if(toRender != null)\r
135                         {\r
136                                 cell.Text = String.Empty;\r
137                                 toRender.InstantiateIn(cell);\r
138                         }\r
139                 }\r
140         }\r
141 }\r