2005-04-22 Lluis Sanchez Gual <lluis@novell.com>
authorLluis Sanchez <lluis@novell.com>
Fri, 22 Apr 2005 15:07:47 +0000 (15:07 -0000)
committerLluis Sanchez <lluis@novell.com>
Fri, 22 Apr 2005 15:07:47 +0000 (15:07 -0000)
* DataKey.cs: Added virtual TrackViewState and IsTrackingViewState
members.
* DataControlFieldHeaderCell.cs: Save Scope in view state.
Added AbbreviatedText property.
* AutoGeneratedField.cs: The constructor should actually be internal.
* DataGridItem.cs: Added implemented interface in 2.0.
* DataControlFieldCollection.cs: Implemented CloneFields and
GetKnownTypes().
*

svn path=/trunk/mcs/; revision=43443

mcs/class/System.Web/System.Web.UI.WebControls/AutoGeneratedField.cs
mcs/class/System.Web/System.Web.UI.WebControls/ChangeLog
mcs/class/System.Web/System.Web.UI.WebControls/DataControlFieldCollection.cs
mcs/class/System.Web/System.Web.UI.WebControls/DataControlFieldHeaderCell.cs
mcs/class/System.Web/System.Web.UI.WebControls/DataGridItem.cs
mcs/class/System.Web/System.Web.UI.WebControls/DataKey.cs
mcs/class/System.Web/System.Web.UI.WebControls/HyperLinkField.cs [new file with mode: 0644]

index 4c0a9ea62ff2954d0bf469329a4fcde698d2cf80..74097c3b801f3d62cb8d03df8626b728ba74ade4 100644 (file)
@@ -44,7 +44,7 @@ namespace System.Web.UI.WebControls {
        {
                Type dataType;
                
-               AutoGeneratedField ()
+               internal AutoGeneratedField ()
                {
                }
                
index 453ab4b2e1dd2d5f119e7290d27c4de4c65a3d79..9e22f258dc49a9180b895babfdb1c3ef85534b71 100644 (file)
@@ -1,3 +1,15 @@
+2005-04-22  Lluis Sanchez Gual <lluis@novell.com>
+
+       * DataKey.cs: Added virtual TrackViewState and IsTrackingViewState
+       members.
+       * DataControlFieldHeaderCell.cs: Save Scope in view state.
+       Added AbbreviatedText property.
+       * AutoGeneratedField.cs: The constructor should actually be internal.
+       * DataGridItem.cs: Added implemented interface in 2.0.
+       * DataControlFieldCollection.cs: Implemented CloneFields and
+       GetKnownTypes().
+       * 
+
 2005-04-22 Gonzalo Paniagua Javier <gonzalo@ximian.com>
 
        * StringArrayConverter.cs:
index 31e9cb3ed9044c9169d44edfb029b887c69f3cd5..d35e8145f73368faf289c5a440b6699d98b0dd84 100644 (file)
 using System;
 using System.Collections;
 using System.Web.UI;
+using System.ComponentModel;
 
 namespace System.Web.UI.WebControls
 {
        public sealed class DataControlFieldCollection: StateManagedCollection
        {
+               static readonly Type[] fieldTypes = new Type [] {
+                       typeof(BoundField), typeof(HyperLinkField), typeof(ImageField),
+                       typeof(TemplateField), typeof(AutoGeneratedField), typeof(CheckBoxField),
+                       typeof(ButtonField), typeof(CommandField)
+               };
+                
+               public DataControlFieldCollection CloneFields ()
+               {
+                       DataControlFieldCollection col = new DataControlFieldCollection ();
+                       foreach (DataControlField field in this)
+                               col.Add (field.CloneField ());
+                       return col;
+               }
+               
                public void Add (DataControlField field)
                {
                        ((IList)this).Add (field);
@@ -78,6 +93,7 @@ namespace System.Web.UI.WebControls
                        OnRemoveField (field);
                }
                
+               [Browsable (false)]
                public DataControlField this [int i] {
                        get { return (DataControlField) ((IList)this) [i]; }
                }
@@ -111,9 +127,24 @@ namespace System.Web.UI.WebControls
 
                protected override object CreateKnownType (int index)
                {
+                       switch (index) {
+                               case 0: return new BoundField ();
+                               case 1: return new HyperLinkField ();
+                               case 2: return new ImageField ();
+                               case 3: return new TemplateField ();
+                               case 4: return new AutoGeneratedField ();
+                               case 5: return new CheckBoxField ();
+                               case 6: return new ButtonField ();
+                               case 7: return new CommandField ();
+                       }
                        return null;
                }
                
+               protected override Type [] GetKnownTypes ()
+               {
+                       return fieldTypes;
+               }
+               
                public event EventHandler FieldsChanged;
        }
 }
index 6596ca23df83c12ba054303deb6b52869968c500..084fd852d48243a3d6d48342c7384abe67eaadbf 100644 (file)
@@ -47,8 +47,25 @@ namespace System.Web.UI.WebControls
                }
                
                public TableHeaderScope Scope {
-                       get { return scope; }
-                       set { scope = value; }
+                       get {
+                               object ob = ViewState ["Scope"];
+                               if (ob != null) return (TableHeaderScope) ob;
+                               else return TableHeaderScope.NotSet;
+                       }
+                       set {
+                               ViewState ["Scope"] = value;
+                       }
+               }
+               
+               public virtual string AbbreviatedText {
+                       get {
+                               object ob = ViewState ["AbbreviatedText"];
+                               if (ob != null) return (string) ob;
+                               else return string.Empty;
+                       }
+                       set {
+                               ViewState ["AbbreviatedText"] = value;
+                       }
                }
                
                protected override void AddAttributesToRender (HtmlTextWriter writer)
@@ -62,6 +79,8 @@ namespace System.Web.UI.WebControls
                                        writer.AddAttribute (HtmlTextWriterAttribute.Scope, "row");
                                        break;
                        }
+                       if (AbbreviatedText.Length > 0)
+                               writer.AddAttribute (HtmlTextWriterAttribute.Abbr, AbbreviatedText);
                }
        }
 }
index ed3fb8614b6d93f466af33cfa5d5409c07ac460e..a56266e016e44ccfb11384ad53f14945d17d7959 100644 (file)
@@ -38,7 +38,10 @@ using System.Web.UI;
 \r
 namespace System.Web.UI.WebControls\r
 {\r
-       public class DataGridItem : TableRow, INamingContainer\r
+       public class DataGridItem : TableRow, INamingContainer
+#if NET_2_0
+               , IDataItemContainer
+#endif\r
        {\r
                private int itemIndex;\r
                private int dataSetIndex;\r
index cb0c418b1c44f72a80968d4e442eab020cc47e95..38baee635b7a5be6f0c660fc95c09afde1988af8 100644 (file)
@@ -115,6 +115,15 @@ namespace System.Web.UI.WebControls
                        }
                }
                
+               protected virtual void TrackViewState ()
+               {
+                       trackViewState = true;
+               }
+               
+               protected virtual bool IsTrackingViewState {
+                       get { return trackViewState; }
+               }
+               
                void IStateManager.LoadViewState (object savedState)
                {
                        LoadViewState (savedState);
@@ -127,11 +136,11 @@ namespace System.Web.UI.WebControls
                
                void IStateManager.TrackViewState ()
                {
-                       trackViewState = true;
+                       TrackViewState ();
                }
                
                bool IStateManager.IsTrackingViewState {
-                       get { return trackViewState; }
+                       get { return IsTrackingViewState; }
                }
        }
 }
diff --git a/mcs/class/System.Web/System.Web.UI.WebControls/HyperLinkField.cs b/mcs/class/System.Web/System.Web.UI.WebControls/HyperLinkField.cs
new file mode 100644 (file)
index 0000000..c2513e9
--- /dev/null
@@ -0,0 +1,275 @@
+//
+// System.Web.UI.WebControls.HyperLinkField.cs
+//
+// Authors:
+//     Lluis Sanchez Gual (lluis@novell.com)
+//
+// (C) 2005 Novell, Inc (http://www.novell.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.
+//
+
+#if NET_2_0
+using System.Collections;
+using System.Collections.Specialized;
+using System.Web.UI;
+using System.ComponentModel;
+using System.Security.Permissions;
+using System.Reflection;
+
+namespace System.Web.UI.WebControls {
+
+       [AspNetHostingPermissionAttribute (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       [AspNetHostingPermissionAttribute (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
+       public class HyperLinkField : DataControlField
+       {
+               PropertyDescriptor textProperty;
+               PropertyDescriptor[] urlProperties;
+               static string[] emptyFields;
+               
+               public override bool Initialize (bool sortingEnabled, Control control)
+               {
+                       return base.Initialize (sortingEnabled, control);
+               }
+               
+           [EditorAttribute ("System.Web.UI.Design.WebControls.DataFieldEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]\r
+           [TypeConverterAttribute (typeof(StringArrayConverter))]\r
+           [WebCategoryAttribute ("Data")]\r
+           [DefaultValueAttribute ("")]\r
+               public virtual string[] DataNavigateUrlFields {
+                       get {
+                               object ob = ViewState ["DataNavigateUrlFields"];
+                               if (ob != null) return (string[]) ob;
+                               if (emptyFields == null) emptyFields = new string[0];
+                               return emptyFields;
+                       }
+                       set {
+                               ViewState ["DataNavigateUrlFields"] = value;
+                               OnFieldChanged ();
+                       }
+               }
+
+               [DefaultValueAttribute ("")]
+               [WebCategoryAttribute ("Data")]
+               public virtual string DataNavigateUrlFormatString {
+                       get {
+                               object ob = ViewState ["DataNavigateUrlFormatString"];
+                               if (ob != null) return (string) ob;
+                               return "";
+                       }
+                       set {
+                               ViewState ["DataNavigateUrlFormatString"] = value;
+                               OnFieldChanged ();
+                       }
+               }
+
+               [WebCategoryAttribute ("Data")]
+               [DefaultValueAttribute ("")]
+           [TypeConverterAttribute ("System.Web.UI.Design.DataSourceViewSchemaConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]\r
+               public virtual string DataTextField {
+                       get {
+                               object ob = ViewState ["DataTextField"];
+                               if (ob != null) return (string) ob;
+                               return "";
+                       }
+                       set {
+                               ViewState ["DataTextField"] = value;
+                               OnFieldChanged ();
+                       }
+               }
+
+               [DefaultValueAttribute ("")]
+               [WebCategoryAttribute ("Data")]
+               public virtual string DataTextFormatString {
+                       get {
+                               object ob = ViewState ["DataTextFormatString"];
+                               if (ob != null) return (string) ob;
+                               return "";
+                       }
+                       set {
+                               ViewState ["DataTextFormatString"] = value;
+                               OnFieldChanged ();
+                       }
+               }
+
+           [DefaultValueAttribute ("")]\r
+           [EditorAttribute ("System.Web.UI.Design.ImageUrlEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]\r
+           [UrlPropertyAttribute]\r
+           [WebCategoryAttribute ("Behavior")]\r
+               public virtual string NavigateUrl {
+                       get {
+                               object ob = ViewState ["NavigateUrl"];
+                               if (ob != null) return (string) ob;
+                               return "";
+                       }
+                       set {
+                               ViewState ["NavigateUrl"] = value;
+                               OnFieldChanged ();
+                       }
+               }
+
+               [DefaultValueAttribute ("")]
+               [WebCategoryAttribute ("Behavior")]
+           [TypeConverterAttribute (typeof(TargetConverter))]\r
+               public virtual string Target {
+                       get {
+                               object ob = ViewState ["Target"];
+                               if (ob != null) return (string) ob;
+                               return "";
+                       }
+                       set {
+                               ViewState ["Target"] = value;
+                               OnFieldChanged ();
+                       }
+               }
+
+           [LocalizableAttribute (true)]\r
+           [DefaultValueAttribute ("")]\r
+           [WebCategoryAttribute ("Appearance")]\r
+               public virtual string Text {
+                       get {
+                               object ob = ViewState ["Text"];
+                               if (ob != null) return (string) ob;
+                               return "";
+                       }
+                       set {
+                               ViewState ["Text"] = value;
+                               OnFieldChanged ();
+                       }
+               }
+               
+               public override void InitializeCell (DataControlFieldCell cell,
+                       DataControlCellType cellType, DataControlRowState rowState, int rowIndex)
+               {
+                       base.InitializeCell (cell, cellType, rowState, rowIndex);
+                       HyperLink link = new HyperLink ();
+                       bool bind = false;
+                       
+                       if (Target.Length > 0)
+                               link.Target = Target;
+                       
+                       if (DataTextField.Length > 0)
+                               bind = true;
+                       else
+                               link.Text = Text;
+                       
+                       string[] fields = DataNavigateUrlFields;
+                       if (fields.Length > 0)
+                               bind = true;
+                       else
+                               link.NavigateUrl = NavigateUrl;
+
+                       if (bind && cellType == DataControlCellType.DataCell && (rowState & DataControlRowState.Insert) == 0)
+                               cell.DataBinding += new EventHandler (OnDataBindField);
+
+                       cell.Controls.Add (link);
+               }
+               
+               protected virtual string FormatDataNavigateUrlValue (object[] dataUrlValues)
+               {
+                       if (dataUrlValues == null || dataUrlValues.Length == 0)
+                               return "";
+                       else if (DataNavigateUrlFormatString.Length > 0)
+                               return string.Format (DataNavigateUrlFormatString, dataUrlValues);
+                       else
+                               return dataUrlValues[0].ToString ();
+               }
+               
+               protected virtual string FormatDataTextValue (object dataTextValue)
+               {
+                       if (DataTextFormatString.Length > 0)
+                               return string.Format (DataTextFormatString, dataTextValue);
+                       else if (dataTextValue == null)
+                               return "";
+                       else
+                               return dataTextValue.ToString ();
+               }
+               
+               void OnDataBindField (object sender, EventArgs e)
+               {
+                       DataControlFieldCell cell = (DataControlFieldCell) sender;
+                       HyperLink link = (HyperLink) cell.Controls [0];
+                       object controlContainer = cell.BindingContainer;
+                       object item = DataBinder.GetDataItem (controlContainer);
+                       
+                       if (DataTextField.Length > 0) {
+                               if (textProperty == null) SetupProperties (controlContainer);
+                               link.Text = FormatDataTextValue (textProperty.GetValue (item));
+                       }
+                       
+                       string[] urlFields = DataNavigateUrlFields;
+                       if (urlFields.Length > 0) {
+                               if (urlProperties == null) SetupProperties (controlContainer);
+                               object[] dataUrlValues = new object [urlFields.Length];
+                               for (int n=0; n<dataUrlValues.Length; n++)
+                                       dataUrlValues [n] = urlProperties [n].GetValue (item);
+                               link.NavigateUrl = FormatDataNavigateUrlValue (dataUrlValues);
+                       }
+               }
+               
+               void SetupProperties (object controlContainer)
+               {
+                       object item = DataBinder.GetDataItem (controlContainer);
+                       PropertyDescriptorCollection props = TypeDescriptor.GetProperties (item); 
+                       
+                       if (DataTextField.Length > 0) {
+                               textProperty = props [DataTextField];
+                               if (textProperty == null)
+                                       new InvalidOperationException ("Property '" + DataTextField + "' not found in object of type " + item.GetType());
+                       }
+                       
+                       string[] urlFields = DataNavigateUrlFields;
+                       if (urlFields.Length > 0) {
+                               urlProperties = new PropertyDescriptor [urlFields.Length];
+                               for (int n=0; n<urlFields.Length; n++) {
+                                       PropertyDescriptor prop = props [urlFields [n]];
+                                       if (prop == null)
+                                               new InvalidOperationException ("Property '" + urlFields [n] + "' not found in object of type " + item.GetType());
+                                       urlProperties [n] = prop;
+                               }
+                       }
+               }
+               
+               protected override DataControlField CreateField ()
+               {
+                       return new HyperLinkField ();
+               }
+               
+               protected override void CopyProperties (DataControlField newField)
+               {
+                       base.CopyProperties (newField);
+                       HyperLinkField field = (HyperLinkField) newField;
+                       field.DataNavigateUrlFields = DataNavigateUrlFields;
+                       field.DataNavigateUrlFormatString = DataNavigateUrlFormatString;
+                       field.DataTextField = DataTextField;
+                       field.DataTextFormatString = DataTextFormatString;
+                       field.NavigateUrl = NavigateUrl;
+                       field.Target = Target;
+                       field.Text = Text;
+               }
+               
+               public override void ValidateSupportsCallback ()
+               {
+               }
+       }
+}
+#endif