2004-06-09 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / ButtonColumn.cs
1 //
2 // System.Web.UI.WebControls.ButtonColumn.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 //
11 \r
12 using System;\r
13 using System.ComponentModel;\r
14 using System.Web;\r
15 using System.Web.UI;\r
16 \r
17 namespace System.Web.UI.WebControls\r
18 {\r
19         public class ButtonColumn : DataGridColumn\r
20         {\r
21                 private PropertyDescriptor textFieldDescriptor;\r
22                 \r
23                 public ButtonColumn(): base()\r
24                 {\r
25                 }\r
26 \r
27                 public override void Initialize()\r
28                 {\r
29                         base.Initialize();\r
30                         textFieldDescriptor = null;\r
31                 }\r
32                 \r
33                 public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType)\r
34                 {\r
35                         base.InitializeCell(cell, columnIndex, itemType);\r
36                         if (Enum.IsDefined(typeof(ListItemType), itemType) &&\r
37                             itemType != ListItemType.Footer &&\r
38                             itemType != ListItemType.Header)\r
39                         {\r
40                                 WebControl toDisplay = null;\r
41                                 if(ButtonType == ButtonColumnType.PushButton)\r
42                                 {\r
43                                         Button b = new Button();\r
44                                         b.Text = Text;\r
45                                         b.CommandName = CommandName;\r
46                                         b.CausesValidation = false;\r
47                                         toDisplay = b;\r
48                                 } else\r
49                                 {\r
50                                         LinkButton lb = new DataGridLinkButton();\r
51                                         lb.Text = Text;\r
52                                         lb.CommandName = CommandName;\r
53                                         lb.CausesValidation = false;\r
54                                         toDisplay = lb;\r
55                                 }\r
56                                 if(DataTextField.Length > 0)\r
57                                 {\r
58                                         toDisplay.DataBinding += new EventHandler(OnDataBindButtonColumn);\r
59                                 }\r
60                                 cell.Controls.Add(toDisplay);\r
61                         }\r
62                 }\r
63                 \r
64                 private void OnDataBindButtonColumn(object sender, EventArgs e)\r
65                 {\r
66                         Control ctrl = (Control)sender;\r
67                         object item = ((DataGridItem)ctrl.NamingContainer).DataItem;\r
68                         if(textFieldDescriptor == null)\r
69                         {\r
70                                 textFieldDescriptor = TypeDescriptor.GetProperties(item).Find(DataTextField, true);\r
71                                 if(textFieldDescriptor == null && !DesignMode)\r
72                                         throw new HttpException(HttpRuntime.FormatResourceString("Field_Not_Found", DataTextField));\r
73                         }\r
74                         string text;\r
75                         if(textFieldDescriptor != null)\r
76                         {\r
77                                 text = FormatDataTextValue(textFieldDescriptor.GetValue(item));\r
78                         } else\r
79                         {\r
80                                 text = "Sample_DataBound_Text";\r
81                         }\r
82                         if(ctrl is LinkButton)\r
83                         {\r
84                                 ((LinkButton)ctrl).Text = text;\r
85                         }\r
86                         else\r
87                         {\r
88                                 ((Button)ctrl).Text = text;\r
89                         }\r
90                 }\r
91                 \r
92                 protected virtual string FormatDataTextValue(object dataTextValue)\r
93                 {\r
94                         string retVal = null;\r
95                         if(dataTextValue != null)\r
96                         {\r
97                                 if(DataTextFormatString.Length > 0)\r
98                                 {\r
99                                         retVal = String.Format(DataTextFormatString, dataTextValue);\r
100                                 }\r
101                                 else\r
102                                 {\r
103                                         retVal = dataTextValue.ToString();\r
104                                 }\r
105                         }\r
106                         return retVal;\r
107                 }
108
109                 // LAMESPEC The framework uses Description values for metadata here. However they should be WebSysDescriptions
110                 // because all metadata in this namespace has WebSysDescriptions\r
111
112                 [DefaultValue (typeof (ButtonColumnType), "LinkButton"), WebCategory ("Misc")]
113                 [Description ("The type of button used in this column.")]\r
114                 public virtual ButtonColumnType ButtonType\r
115                 {\r
116                         get\r
117                         {\r
118                                 object o = ViewState["ButtonType"];\r
119                                 if(o!=null)\r
120                                         return (ButtonColumnType)o;\r
121                                 return ButtonColumnType.LinkButton;\r
122                         }\r
123                         set\r
124                         {\r
125                                 if(!System.Enum.IsDefined(typeof(ButtonColumnType), value))\r
126                                         throw new ArgumentException();\r
127                                 ViewState["ButtonType"] = value;\r
128                         }\r
129                 }\r
130
131                 [DefaultValue (""), WebCategory ("Misc")]
132                 [Description ("The command assigned to this column.")]\r
133                 public virtual string CommandName\r
134                 {\r
135                         get\r
136                         {\r
137                                 string cn = (string)ViewState["CommandName"];\r
138                                 if(cn!=null)\r
139                                         return cn;\r
140                                 return String.Empty;\r
141                         }\r
142                         set\r
143                         {\r
144                                 ViewState["CommandName"] = value;\r
145                         }\r
146                 }\r
147
148                 [DefaultValue (""), WebCategory ("Misc")]
149                 [Description ("The datafield that is bound to the text property.")]\r
150                 public virtual string DataTextField\r
151                 {\r
152                         get\r
153                         {\r
154                                 string dtf = (string)ViewState["DataTextField"];\r
155                                 if(dtf!=null)\r
156                                         return dtf;\r
157                                 return String.Empty;\r
158                         }\r
159                         set\r
160                         {\r
161                                 ViewState["DataTextField"] = value;\r
162                         }\r
163                 }\r
164
165                 [DefaultValue (""), WebCategory ("Misc")]
166                 [Description ("A format that is applied to the bound text property.")]\r
167                 public virtual string DataTextFormatString\r
168                 {\r
169                         get\r
170                         {\r
171                                 string dtfs = (string)ViewState["DataTextFormatString"];\r
172                                 if(dtfs!=null)\r
173                                         return dtfs;\r
174                                 return String.Empty;\r
175                         }\r
176                         set\r
177                         {\r
178                                 ViewState["DataTextFormatString"] = value;\r
179                         }\r
180                 }\r
181
182                 [DefaultValue (""), WebCategory ("Misc")]
183                 [Description ("The text used for this button.")]\r
184                 public virtual string Text\r
185                 {\r
186                         get\r
187                         {\r
188                                 string text = (string)ViewState["Text"];\r
189                                 if(text!=null)\r
190                                         return text;\r
191                                 return String.Empty;\r
192                         }\r
193                         set\r
194                         {\r
195                                 ViewState["Text"] = value;\r
196                         }\r
197                 }\r
198         }\r
199 }\r