-/**\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;
+ }
+ }
+ }
+}