// // System.Web.UI.WebControls.ButtonColumn.cs // // Authors: // Gaurav Vaish (gvaish@iitk.ac.in) // Andreas Nahr (ClassDevelopment@A-SoftTech.com) // // (C) Gaurav Vaish (2002) // (C) 2003 Andreas Nahr // using System; using System.ComponentModel; using System.Web; using System.Web.UI; namespace System.Web.UI.WebControls { public class ButtonColumn : DataGridColumn { private PropertyDescriptor textFieldDescriptor; public ButtonColumn(): base() { } public override void Initialize() { base.Initialize(); textFieldDescriptor = null; } public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType) { base.InitializeCell(cell, columnIndex, itemType); if (Enum.IsDefined(typeof(ListItemType), itemType) && itemType != ListItemType.Footer && itemType != ListItemType.Header) { WebControl toDisplay = null; if(ButtonType == ButtonColumnType.PushButton) { Button b = new Button(); b.Text = Text; b.CommandName = CommandName; b.CausesValidation = false; toDisplay = b; } else { LinkButton lb = new DataGridLinkButton(); lb.Text = Text; lb.CommandName = CommandName; lb.CausesValidation = false; toDisplay = lb; } if(DataTextField.Length > 0) { toDisplay.DataBinding += new EventHandler(OnDataBindButtonColumn); } cell.Controls.Add(toDisplay); } } private void OnDataBindButtonColumn(object sender, EventArgs e) { Control ctrl = (Control)sender; object item = ((DataGridItem)ctrl.NamingContainer).DataItem; if(textFieldDescriptor == null) { textFieldDescriptor = TypeDescriptor.GetProperties(item).Find(DataTextField, true); if(textFieldDescriptor == null && !DesignMode) throw new HttpException(HttpRuntime.FormatResourceString("Field_Not_Found", DataTextField)); } string text; if(textFieldDescriptor != null) { text = FormatDataTextValue(textFieldDescriptor.GetValue(item)); } else { text = "Sample_DataBound_Text"; } if(ctrl is LinkButton) { ((LinkButton)ctrl).Text = text; } else { ((Button)ctrl).Text = text; } } protected virtual string FormatDataTextValue(object dataTextValue) { string retVal = null; if(dataTextValue != null) { if(DataTextFormatString.Length > 0) { retVal = String.Format(DataTextFormatString, dataTextValue); } else { retVal = dataTextValue.ToString(); } } return retVal; } // LAMESPEC The framework uses Description values for metadata here. However they should be WebSysDescriptions // because all metadata in this namespace has WebSysDescriptions [DefaultValue (typeof (ButtonColumnType), "LinkButton"), WebCategory ("Misc")] [Description ("The type of button used in this column.")] public virtual ButtonColumnType ButtonType { get { object o = ViewState["ButtonType"]; if(o!=null) return (ButtonColumnType)o; return ButtonColumnType.LinkButton; } set { if(!System.Enum.IsDefined(typeof(ButtonColumnType), value)) throw new ArgumentException(); ViewState["ButtonType"] = value; } } [DefaultValue (""), WebCategory ("Misc")] [Description ("The command assigned to this column.")] public virtual string CommandName { get { string cn = (string)ViewState["CommandName"]; if(cn!=null) return cn; return String.Empty; } set { ViewState["CommandName"] = value; } } [DefaultValue (""), WebCategory ("Misc")] [Description ("The datafield that is bound to the text property.")] public virtual string DataTextField { get { string dtf = (string)ViewState["DataTextField"]; if(dtf!=null) return dtf; return String.Empty; } set { ViewState["DataTextField"] = value; } } [DefaultValue (""), WebCategory ("Misc")] [Description ("A format that is applied to the bound text property.")] public virtual string DataTextFormatString { get { string dtfs = (string)ViewState["DataTextFormatString"]; if(dtfs!=null) return dtfs; return String.Empty; } set { ViewState["DataTextFormatString"] = value; } } [DefaultValue (""), WebCategory ("Misc")] [Description ("The text used for this button.")] public virtual string Text { get { string text = (string)ViewState["Text"]; if(text!=null) return text; return String.Empty; } set { ViewState["Text"] = value; } } } }