9591388a2e7201396246eb75f0e53934be2a7467
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / HyperLinkColumn.cs
1 /**\r
2  * Namespace: System.Web.UI.WebControls\r
3  * Class:     HyperLinkColumn\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:  5%\r
10  *\r
11  * (C) Gaurav Vaish (2002)\r
12  */\r
13 \r
14 using System;\r
15 using System.ComponentModel;\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 class HyperLinkColumn: DataGridColumn\r
22         {\r
23                 PropertyDescriptor textFieldDescriptor;\r
24                 PropertyDescriptor urlFieldDescriptor;\r
25 \r
26                 public HyperLinkColumn(): base()\r
27                 {\r
28                 }\r
29 \r
30                 public virtual string DataNavigateUrlField\r
31                 {\r
32                         get\r
33                         {\r
34                                 object o = ViewState["DataNavigateUrlField"];\r
35                                 if(o != null)\r
36                                         return (string)o;\r
37                                 return String.Empty;\r
38                         }\r
39                         set\r
40                         {\r
41                                 ViewState["DataNavigateUrlField"] = value;\r
42                         }\r
43                 }\r
44 \r
45                 public virtual string DataNavigateUrlFormatString\r
46                 {\r
47                         get\r
48                         {\r
49                                 object o = ViewState["DataNavigateUrlFormatString"];\r
50                                 if(o != null)\r
51                                         return (string)o;\r
52                                 return String.Empty;\r
53                         }\r
54                         set\r
55                         {\r
56                                 ViewState["DataNavigateUrlFormatString"] = value;\r
57                         }\r
58                 }\r
59 \r
60                 public virtual string DataTextField\r
61                 {\r
62                         get\r
63                         {\r
64                                 object o = ViewState["DataTextField"];\r
65                                 if(o != null)\r
66                                         return (string)o;\r
67                                 return String.Empty;\r
68                         }\r
69                         set\r
70                         {\r
71                                 ViewState["DataTextField"] = value;\r
72                         }\r
73                 }\r
74 \r
75                 public virtual string DataTextFormatString\r
76                 {\r
77                         get\r
78                         {\r
79                                 object o = ViewState["DataTextFormatString"];\r
80                                 if(o != null)\r
81                                         return (string)o;\r
82                                 return String.Empty;\r
83                         }\r
84                         set\r
85                         {\r
86                                 ViewState["DataTextFormatString"] = value;\r
87                         }\r
88                 }\r
89 \r
90                 public virtual string NavigateUrl\r
91                 {\r
92                         get\r
93                         {\r
94                                 object o = ViewState["NavigateUrl"];\r
95                                 if(o != null)\r
96                                         return (string)o;\r
97                                 return String.Empty;\r
98                         }\r
99                         set\r
100                         {\r
101                                 ViewState["NavigateUrl"] = value;\r
102                         }\r
103                 }\r
104 \r
105                 public virtual string Target\r
106                 {\r
107                         get\r
108                         {\r
109                                 object o = ViewState["Target"];\r
110                                 if(o != null)\r
111                                         return (string)o;\r
112                                 return String.Empty;\r
113                         }\r
114                         set\r
115                         {\r
116                                 ViewState["Target"] = value;\r
117                         }\r
118                 }\r
119 \r
120                 public virtual string Text\r
121                 {\r
122                         get\r
123                         {\r
124                                 object o = ViewState["Text"];\r
125                                 if(o != null)\r
126                                         return (string)o;\r
127                                 return String.Empty;\r
128                         }\r
129                         set\r
130                         {\r
131                                 ViewState["Text"] = value;\r
132                         }\r
133                 }\r
134 \r
135                 public override void Initialize()\r
136                 {\r
137                         textFieldDescriptor = null;\r
138                         urlFieldDescriptor  = null;\r
139                 }\r
140 \r
141                 public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType)\r
142                 {\r
143                         base.InitializeCell(cell, columnIndex, itemType);\r
144                         if(Enum.IsDefined(typeof(ListItemType), itemType) && itemType != ListItemType.Footer)\r
145                         {\r
146                                 HyperLink toDisplay = new HyperLink();\r
147                                 toDisplay.Text                 = Text;\r
148                                 toDisplay.NavigateUrl          = NavigateUrl;\r
149                                 toDisplay.Target               = Target;\r
150                                 if(DataTextField.Length > 0 || DataNavigateUrlField.Length>0)\r
151                                 {\r
152                                         toDisplay.DataBinding += new EventHandler(OnDataBindHyperLinkColumn);\r
153                                 }\r
154                                 cell.Controls.Add(toDisplay);\r
155                         }\r
156                 }\r
157 \r
158                 private void OnDataBindHyperLinkColumn(object sender, EventArgs e)\r
159                 {\r
160                         HyperLink link = (HyperLink)sender;\r
161                         object item    = ((DataGridItem)link.NamingContainer).DataItem;\r
162                         if(textFieldDescriptor == null && urlFieldDescriptor == null)\r
163                         {\r
164                                 textFieldDescriptor = TypeDescriptor.GetProperties(item).Find(DataTextField, true);\r
165                                 if(textFieldDescriptor == null && !DesignMode)\r
166                                         throw new HttpException(HttpRuntime.FormatResourceString("Field_Not_Found", DataTextField));\r
167                                 urlFieldDescriptor = TypeDescriptor.GetProperties(item).Find(DataNavigateUrlField, true);\r
168                                 if(urlFieldDescriptor == null && !DesignMode)\r
169                                         throw new HttpException(HttpRuntime.FormatResourceString("Field_Not_Found", DataNavigateUrlField));\r
170                         }\r
171 \r
172                         if(textFieldDescriptor != null)\r
173                         {\r
174                                 link.Text = FormatDataTextValue(textFieldDescriptor.GetValue(item));\r
175                         } else\r
176                         {\r
177                                 link.Text = "Sample_DataBound_Text";\r
178                         }\r
179 \r
180                         if(urlFieldDescriptor != null)\r
181                         {\r
182                                 link.NavigateUrl = FormatDataNavigateUrlValue(urlFieldDescriptor.GetValue(item));\r
183                         } else\r
184                         {\r
185                                 link.NavigateUrl = "url";\r
186                         }\r
187                 }\r
188 \r
189                 protected virtual string FormatDataNavigateUrlValue(object dataUrlValue)\r
190                 {\r
191                         string retVal = String.Empty;\r
192                         if(dataUrlValue != null)\r
193                         {\r
194                                 if(DataNavigateUrlFormatString.Length > 0)\r
195                                 {\r
196                                         retVal = String.Format(DataNavigateUrlFormatString, dataUrlValue);\r
197                                 } else\r
198                                 {\r
199                                         retVal = dataUrlValue.ToString();\r
200                                 }\r
201                         }\r
202                         return retVal;\r
203                 }\r
204 \r
205                 protected virtual string FormatDataTextValue(object dataTextValue)\r
206                 {\r
207                         string retVal = String.Empty;\r
208                         if(dataTextValue != null)\r
209                         {\r
210                                 if(DataTextFormatString.Length > 0)\r
211                                 {\r
212                                         retVal = String.Format(DataTextFormatString, dataTextValue);\r
213                                 } else\r
214                                 {\r
215                                         retVal = dataTextValue.ToString();\r
216                                 }\r
217                         }\r
218                         return retVal;\r
219                 }\r
220         }\r
221 }\r