2009-10-30 Marek Habersack <mhabersack@novell.com>
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / HyperLinkColumn.cs
index a74409bac97be06fc2d4799a915db79824ce8c97..3b4e78253ecdd71c76ad71b084a7d6cd205de5f6 100644 (file)
-/**\r
- * Namespace: System.Web.UI.WebControls\r
- * Class:     HyperLinkColumn\r
- *\r
- * Author:  Gaurav Vaish\r
- * Maintainer: gvaish@iitk.ac.in\r
- * Contact: <my_scripts2001@yahoo.com>, <gvaish@iitk.ac.in>\r
- * Implementation: yes\r
- * Status:  5%\r
- *\r
- * (C) Gaurav Vaish (2002)\r
- */\r
-\r
-using System;\r
-using System.ComponentModel;\r
-using System.Web;\r
-using System.Web.UI;\r
-\r
-namespace System.Web.UI.WebControls\r
-{\r
-       public class HyperLinkColumn: DataGridColumn\r
-       {\r
-               PropertyDescriptor textFieldDescriptor;\r
-               PropertyDescriptor urlFieldDescriptor;\r
-               \r
-               public HyperLinkColumn(): base()\r
-               {\r
-               }\r
-               \r
-               public virtual string DataNavigateUrlField\r
-               {\r
-                       get\r
-                       {\r
-                               object o = ViewState["DataNavigateUrlField"];\r
-                               if(o != null)\r
-                                       return (string)o;\r
-                               return String.Empty;\r
-                       }\r
-                       set\r
-                       {\r
-                               ViewState["DataNavigateUrlField"] = value;\r
-                       }\r
-               }\r
-               \r
-               public virtual string DataNavigateUrlFormatString\r
-               {\r
-                       get\r
-                       {\r
-                               object o = ViewState["DataNavigateUrlFormatString"];\r
-                               if(o != null)\r
-                                       return (string)o;\r
-                               return String.Empty;\r
-                       }\r
-                       set\r
-                       {\r
-                               ViewState["DataNavigateUrlFormatString"] = value;\r
-                       }\r
-               }\r
-               \r
-               public virtual string DataTextField\r
-               {\r
-                       get\r
-                       {\r
-                               object o = ViewState["DataTextField"];\r
-                               if(o != null)\r
-                                       return (string)o;\r
-                               return String.Empty;\r
-                       }\r
-                       set\r
-                       {\r
-                               ViewState["DataTextField"] = value;\r
-                       }\r
-               }\r
-               \r
-               public virtual string DataTextFormatString\r
-               {\r
-                       get\r
-                       {\r
-                               object o = ViewState["DataTextFormatString"];\r
-                               if(o != null)\r
-                                       return (string)o;\r
-                               return String.Empty;\r
-                       }\r
-                       set\r
-                       {\r
-                               ViewState["DataTextFormatString"] = value;\r
-                       }\r
-               }\r
-               \r
-               public virtual string NavigateUrl\r
-               {\r
-                       get\r
-                       {\r
-                               object o = ViewState["NavigateUrl"];\r
-                               if(o != null)\r
-                                       return (string)o;\r
-                               return String.Empty;\r
-                       }\r
-                       set\r
-                       {\r
-                               ViewState["NavigateUrl"] = value;\r
-                       }\r
-               }\r
-               \r
-               public virtual string Target\r
-               {\r
-                       get\r
-                       {\r
-                               object o = ViewState["Target"];\r
-                               if(o != null)\r
-                                       return (string)o;\r
-                               return String.Empty;\r
-                       }\r
-                       set\r
-                       {\r
-                               ViewState["Target"] = value;\r
-                       }\r
-               }\r
-               \r
-               public virtual string Text\r
-               {\r
-                       get\r
-                       {\r
-                               object o = ViewState["Text"];\r
-                               if(o != null)\r
-                                       return (string)o;\r
-                               return String.Empty;\r
-                       }\r
-                       set\r
-                       {\r
-                               ViewState["Text"] = value;\r
-                       }\r
-               }\r
-               \r
-               public override void Initialize()\r
-               {\r
-                       textFieldDescriptor = null;\r
-                       urlFieldDescriptor  = null;\r
-               }\r
-               \r
-               public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType):\r
-                       InitializeCell(cell, columnIndex, itemType)\r
-               {\r
-                       if(Enum.IsDefined(ListItemType, itemType) && itemType != ListItemType.Footer)\r
-                       {\r
-                               HyperLink toDisplay = new HyperLink();\r
-                               toDisplay.Text                 = Text;\r
-                               toDisplay.NavigateUrl          = NavigateUrl;\r
-                               toDisplay.DataNavigateUrlField = DataNavigateUrlField;\r
-                               toDisplay.Target               = Target;\r
-                               if(DataTextField.Length > 0)\r
-                               {\r
-                                       toDisplay.DataBinding += new EventHandler(OnDataBindHyperLinkColumn);\r
-                               }\r
-                               cell.Controls.Add(toDisplay);\r
-                       }\r
-               }\r
-               \r
-               private void OnDataBindHyperLinkColumn(object sender, EventArgs e)\r
-               {\r
-                       HyperLink link = (HyperLink)sender;\r
-                       object item    = ((DataGridItem)link.NamingContainer).DataItem;\r
-                       if(textFieldDescriptor == null && urlFieldDescriptor == null)\r
-                       {\r
-                               textFieldDescriptor = TypeDescriptor.GetProperties(item).Find(DataTextField, true);\r
-                               if(textFieldDescriptor == null && !DesignMode)\r
-                                       throw new HttpException(HttpRuntime.FormatResourceString("Field_Not_Found", DataTextField));\r
-                               urlFieldDescriptor = TypeDescriptor.GetProperties(item).Find(DataNavigateUrlField, true);\r
-                               if(urlFieldDescriptor == null && !DesignMode)\r
-                                       throw new HttpException(HttpRuntime.FormatResourceString("Field_Not_Found", DataNavigateUrlField));\r
-                       }\r
-                       \r
-                       if(textFieldDescritor != null)\r
-                       {\r
-                               link.Text = FormatDataTextValue(textFieldDescritor.GetValue(item));\r
-                       } else\r
-                       {\r
-                               link.Text = "Sample_DataBound_Text";\r
-                       }\r
-                       \r
-                       if(urlFieldDescriptor != null)\r
-                       {\r
-                               link.NavigateUrl = FormatDataNavigateUrlValue(urlFieldDescriptor.GetValue(item));\r
-                       } else\r
-                       {\r
-                               link.NavigateUrl = "url";\r
-                       }\r
-               }\r
-               \r
-               protected virtual string FormatDataNavigateUrlValue(object dataUrlValue)\r
-               {\r
-                       string retVal = String.Empty;\r
-                       if(dataUrlValue != null)\r
-                       {\r
-                               if(DataNavigateUrlFormatString.Length > 0)\r
-                               {\r
-                                       retVal = String.Format(DataNavigateUrlFormatString, dataUrlValue);\r
-                               } else\r
-                               {\r
-                                       retVal = dataUrlValue.ToString();\r
-                               }\r
-                       }\r
-                       return retVal;\r
-               }\r
-               \r
-               protected virtual string FormatDataTextValue(object dataTextValue)\r
-               {\r
-                       string retVal = String.Empty;\r
-                       if(dataUrlValue != null)\r
-                       {\r
-                               if(DataTextFormatString.Length > 0)\r
-                               {\r
-                                       retVal = String.Format(DataTextFormatString, dataTextValue);\r
-                               } else\r
-                               {\r
-                                       retVal = dataTextValue.ToString();\r
-                               }\r
-                       }\r
-                       return retVal;\r
-               }\r
-       }\r
-}\r
+//
+// System.Web.UI.WebControls.HyperLinkColumn.cs
+//
+// Author: Duncan Mak (duncan@ximian.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+// Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
+//
+
+using System.ComponentModel;
+using System.Data;
+using System.Security.Permissions;
+
+namespace System.Web.UI.WebControls {
+
+       // CAS
+       [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+        public class HyperLinkColumn : DataGridColumn
+        {
+               public HyperLinkColumn ()
+               {
+               }
+
+               [DefaultValue("")]
+               [WebSysDescription ("")]
+               [WebCategory ("Misc")]
+               public virtual string DataNavigateUrlField {
+                       get {
+                               return ViewState.GetString ("DataNavigateUrlField", String.Empty);
+                       }
+                       set { ViewState ["DataNavigateUrlField"] = value; }
+               }
+
+               [DefaultValue("")]
+               [Description("The formatting applied to the value bound to the NavigateUrl property.")]
+               [WebCategory ("Misc")]
+               public virtual string DataNavigateUrlFormatString {
+                       get {
+                               return ViewState.GetString ("DataNavigateUrlFormatString", String.Empty);
+                       }
+                       set { ViewState ["DataNavigateUrlFormatString"] = value; }
+               }
+
+               [DefaultValue("")]
+               [WebSysDescription ("")]
+               [WebCategory ("Misc")]
+               public virtual string DataTextField {
+                       get {
+                               return ViewState.GetString ("DataTextField", String.Empty);
+                       }
+                       set { ViewState ["DataTextField"] = value; }
+               }
+
+               [Description("The formatting applied to the value bound to the Text property.")]
+               [DefaultValue("")]
+               [WebCategory ("Misc")]
+               public virtual string DataTextFormatString {
+                       get {
+                               return ViewState.GetString ("DataTextFormatString", String.Empty);
+                       }
+                       set { ViewState ["DataTextFormatString"] = value; }
+               }
+               
+               [DefaultValue("")]
+               [WebSysDescription ("")]
+               [WebCategory ("Misc")]
+               public virtual string NavigateUrl {
+                       get {
+                               return ViewState.GetString ("NavigateUrl", String.Empty);
+                       }
+                       set { ViewState ["NavigateUrl"] = value; }
+               }
+
+               [DefaultValue("")]
+               [WebSysDescription ("")]
+               [WebCategory ("Misc")]
+               public virtual string Target {
+                       get {
+                               return ViewState.GetString ("Target", String.Empty);
+                       }
+                       set { ViewState ["Target"] = value; }
+               }
+
+               [DefaultValue("")]
+               [WebSysDescription ("")]
+               [WebCategory ("Misc")]
+               public virtual string Text {
+                       get {
+                               return ViewState.GetString ("Text", String.Empty);
+                       }
+                       set { ViewState ["Text"] = value; }
+               }
+
+               protected virtual string FormatDataNavigateUrlValue (object value)
+               {
+                       string format = DataNavigateUrlFormatString;
+                       if (format == "")
+                               format = null;
+
+                       return DataBinder.FormatResult (value, format);
+               }
+
+               protected virtual string FormatDataTextValue (object value)
+               {
+                       string format = DataTextFormatString;
+                       if (format == "")
+                               format = null;
+
+                       return DataBinder.FormatResult (value, format);
+               }
+
+               public override void Initialize ()
+               {
+                       base.Initialize ();
+               }
+
+               void ItemDataBinding (object sender, EventArgs args)
+               {
+                       TableCell cell = (TableCell)sender;
+                       HyperLink ctrl = (HyperLink)cell.Controls[0];
+                       DataGridItem item = (DataGridItem)cell.NamingContainer;
+
+                       if (DataNavigateUrlField != "")
+                               ctrl.NavigateUrl = FormatDataNavigateUrlValue (DataBinder.Eval (item.DataItem, DataNavigateUrlField));
+                       else
+                               ctrl.NavigateUrl = NavigateUrl;
+
+                       if (DataTextField != "")
+                               ctrl.Text = FormatDataTextValue (DataBinder.Eval (item.DataItem, DataTextField));
+                       else
+                               ctrl.Text = Text;
+
+                       ctrl.Target = Target;
+               }
+
+               public override void InitializeCell (TableCell cell, int column_index, ListItemType item_type)
+               {
+                       base.InitializeCell (cell, column_index, item_type);
+
+                       switch (item_type)
+                       {
+                       case ListItemType.Separator: 
+                       case ListItemType.Pager:
+                       case ListItemType.Footer:
+                       case ListItemType.Header: {
+                               // Base handles header and footer, dunno about the others
+                               return;
+                       }
+                       case ListItemType.Item:
+                       case ListItemType.EditItem:
+                       case ListItemType.AlternatingItem:
+                               cell.DataBinding += new EventHandler(ItemDataBinding);
+                               cell.Controls.Add (new HyperLink ());
+                               break;
+                       }
+               }
+        }
+}