Merge pull request #2323 from esdrubal/servicemodel
[mono.git] / mcs / class / System.Web / System.Web.UI.WebControls / ButtonColumn.cs
index bd60cd1faabd891b4a9472647de5aeeb33eaf5d9..94d8ee9c046c88e1e78662c358c6f544dfc5041a 100644 (file)
@@ -3,8 +3,9 @@
 //
 // Author:
 //      Dick Porter  <dick@ximian.com>
+//      Gonzalo Paniagua Javier (gonzalo@ximian.com)
 //
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005-2010 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
 using System.ComponentModel;
 using System.Security.Permissions;
 
-namespace System.Web.UI.WebControls {
-
+namespace System.Web.UI.WebControls
+{
        // CAS
        [AspNetHostingPermission (SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
        [AspNetHostingPermission (SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
-       public class ButtonColumn : DataGridColumn {
-                      
+       public class ButtonColumn : DataGridColumn
+       {
+               string text_field;
+               string format;
+
                [DefaultValue(ButtonColumnType.LinkButton)]
-#if NET_2_0
                [WebSysDescription("The type of button contained within the column.")]
-#else
-               [Description("The type of button contained within the column.")]
-#endif
                [WebCategory ("Misc")]
-               public virtual ButtonColumnType ButtonType
-               {
+               public virtual ButtonColumnType ButtonType {
                        get {
                                return (ButtonColumnType) ViewState.GetInt ("LinkButton",
                                                (int) ButtonColumnType.LinkButton);
                        }
-                       set {
-                               ViewState ["LinkButton"] = value;
-                       }
+                       set { ViewState ["LinkButton"] = value; }
                }
                
                [DefaultValue("")]
-#if NET_2_0
                [WebSysDescription("The command associated with the button.")]
-#else
-               [Description("The command associated with the button.")]
-#endif
                [WebCategory ("Misc")]
-               public virtual string CommandName
-               {
-                       get {
-                               return ViewState.GetString ("CommandName", String.Empty);
-                       }
-                       set {
-                               ViewState ["CommandName"] = value;
-                       }
+               public virtual string CommandName {
+                       get { return ViewState.GetString ("CommandName", String.Empty); }
+                       set { ViewState ["CommandName"] = value; }
                }
 
-#if NET_2_0
                [DefaultValue (false)]
                [WebSysDescription("")]
                [WebCategory ("Behavior")]
-               public virtual bool CausesValidation
-               {
-                       get {
-                               return ViewState.GetBool ("CausesValidation", false);
-                       }
-                       set {
-                               ViewState ["CausesValidation"] = value;
-                       }
+               public virtual bool CausesValidation {
+                       get { return ViewState.GetBool ("CausesValidation", false); }
+                       set { ViewState ["CausesValidation"] = value; }
                }
-#endif
 
                [DefaultValue("")]
-#if NET_2_0
                [WebSysDescription("The field bound to the text property of the button.")]
-#else
-               [Description("The field bound to the text property of the button.")]
-#endif
                [WebCategory ("Misc")]
-               public virtual string DataTextField 
-               {
-                       get {
-                               return ViewState.GetString ("DataTextField", String.Empty);
-                       }
-                       set {
-                               ViewState ["DataTextField"] = value;
-                       }
+               public virtual string DataTextField {
+                       get { return ViewState.GetString ("DataTextField", String.Empty); }
+                       set { ViewState ["DataTextField"] = value; }
                }
                
                [DefaultValue("")]
-#if NET_2_0
                [WebSysDescription("The formatting applied to the value bound to the Text property.")]
-#else
-               [Description("The formatting applied to the value bound to the Text property.")]
-#endif
                [WebCategory ("Misc")]
-               public virtual string DataTextFormatString 
-               {
-                       get {
-                               return ViewState.GetString ("DataTextFormatString",
-                                               String.Empty);
-                       }
+               public virtual string DataTextFormatString {
+                       get { return ViewState.GetString ("DataTextFormatString", String.Empty); }
                        set {
                                ViewState ["DataTextFormatString"] = value;
+                               format = null;
                        }
                }
 
                [DefaultValue("")]
-#if NET_2_0
                [Localizable (true)]
                [WebSysDescription("The text used for the button.")]
-#else
-               [Description("The text used for the button.")]
-#endif
                [WebCategory ("Misc")]
-               public virtual string Text 
-               {
-                       get {
-                               return ViewState.GetString ("Text", String.Empty);
-                       }
-                       set {
-                               ViewState ["Text"] = value;
-                       }
+               public virtual string Text {
+                       get { return ViewState.GetString ("Text", String.Empty); }
+                       set { ViewState ["Text"] = value; }
                }
 
-#if NET_2_0
                [DefaultValue ("")]
                [WebSysDescription("")]
                [WebCategory ("Behavior")]
-               public virtual string ValidationGroup
-               {
-                       get {
-                               return ViewState.GetString ("ValidationGroup", "");
-                       }
-                       set {
-                               ViewState ["ValidationGroup"] = value;
-                       }
+               public virtual string ValidationGroup {
+                       get { return ViewState.GetString ("ValidationGroup", String.Empty); }
+                       set { ViewState ["ValidationGroup"] = value; }
                }
-#endif
                
                public override void Initialize ()
                {
@@ -162,47 +111,81 @@ namespace System.Web.UI.WebControls {
                        base.Initialize ();
                }
 
-               public override void InitializeCell (TableCell cell,
-                                                    int columnIndex,
-                                                    ListItemType itemType)
+               public override void InitializeCell (TableCell cell, int columnIndex, ListItemType itemType)
                {
                        base.InitializeCell (cell, columnIndex, itemType);
 
-                       if (itemType != ListItemType.Header &&
-                           itemType != ListItemType.Footer) {
+                       if (itemType != ListItemType.Header && itemType != ListItemType.Footer) {
                                switch (ButtonType) {
-                               case ButtonColumnType.LinkButton: 
-                               {
-                                       LinkButton butt = new LinkButton ();
+                                       case ButtonColumnType.LinkButton: 
+                                       {
+                                               LinkButton butt = new ForeColorLinkButton ();
                                        
-                                       butt.Text = Text;
-                                       butt.CommandName = CommandName;
+                                               butt.Text = Text;
+                                               butt.CommandName = CommandName;
 
-                                       cell.Controls.Add (butt);
-                               }
-                               break;
+                                               if (!String.IsNullOrEmpty (DataTextField))
+                                                       butt.DataBinding += new EventHandler (DoDataBind);
+
+                                               cell.Controls.Add (butt);
+                                       }
+                                       break;
 
-                               case ButtonColumnType.PushButton: 
-                               {
-                                       Button butt = new Button ();
+                                       case ButtonColumnType.PushButton: 
+                                       {
+                                               Button butt = new Button ();
                                        
-                                       butt.Text = Text;
-                                       butt.CommandName = CommandName;
+                                               butt.Text = Text;
+                                               butt.CommandName = CommandName;
 
-                                       cell.Controls.Add (butt);
-                               }
-                               break;
+                                               if (!String.IsNullOrEmpty (DataTextField))
+                                                       butt.DataBinding += new EventHandler (DoDataBind);
+                                               cell.Controls.Add (butt);
+                                       }
+                                       break;
                        
                                }
                        }
                }
+               
+               string GetValueFromItem (DataGridItem item)
+               {
+                       object val = null;
+                       if (text_field == null)
+                               text_field = DataTextField;
+
+                       if (!String.IsNullOrEmpty (text_field))
+                               val = DataBinder.Eval (item.DataItem, text_field);
+
+                       return FormatDataTextValue (val);
+               }
+
+               void DoDataBind (object sender, EventArgs e)
+               {
+                       Control ctrl = (Control) sender;
+                       string text = GetValueFromItem ((DataGridItem) ctrl.NamingContainer);
 
+                       LinkButton lb = sender as LinkButton;
+                       if (lb == null) {
+                               Button b = (Button) sender;
+                               b.Text = text;
+                       } else
+                               lb.Text = text;
+               }
+               
                protected virtual string FormatDataTextValue (object dataTextValue)
                {
-                       if (DataTextFormatString == String.Empty)
+                       if (dataTextValue == null)
+                               return String.Empty;
+
+                       if (format == null)
+                               format = DataTextFormatString;
+
+                       if (String.IsNullOrEmpty (format))
                                return dataTextValue.ToString ();
 
-                       return String.Format (DataTextFormatString, dataTextValue);
+                       return String.Format (format, dataTextValue);
                }
        }
 }
+