You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			251 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			251 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| // <copyright file="AutoGeneratedField.cs" company="Microsoft">
 | |
| //     Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| // </copyright>                                                                
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| namespace System.Web.UI.WebControls {
 | |
| 
 | |
|     using System;
 | |
|     using System.Collections;    
 | |
|     using System.Collections.Specialized;    
 | |
|     using System.ComponentModel;
 | |
| 
 | |
|     /// <devdoc>
 | |
|     /// <para>Creates a field bounded to a data field in a <see cref='System.Web.UI.WebControls.DataBoundControl'/>.</para>
 | |
|     /// </devdoc>
 | |
|     [EditorBrowsable(EditorBrowsableState.Never)]
 | |
|     public sealed class AutoGeneratedField : BoundField {
 | |
|         
 | |
|         private bool _suppressPropertyThrows = false;
 | |
|         private bool _useCheckBox;
 | |
|         private bool _useCheckBoxValid;
 | |
|         
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Initializes a new instance of a <see cref='System.Web.UI.WebControls.BoundField'/> class.</para>
 | |
|         /// </devdoc>
 | |
|         public AutoGeneratedField(string dataField) {
 | |
|             DataField = dataField;
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Gets or sets the display format of data in this
 | |
|         /// field.</para>
 | |
|         /// </devdoc>
 | |
|         public override string DataFormatString {
 | |
|             get {
 | |
|                 return base.DataFormatString;
 | |
|             }
 | |
|             set {
 | |
|                 if (!_suppressPropertyThrows) {
 | |
|                     throw new NotSupportedException();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Gets or sets the type of data being displayed by the field.</para>
 | |
|         /// </devdoc>
 | |
|         public Type DataType {
 | |
|             get {
 | |
|                 object o = ViewState["DataType"];
 | |
|                 if (o != null) {
 | |
|                     return (Type)o;
 | |
|                 }
 | |
|                 return typeof(string);
 | |
|             }
 | |
|             set {
 | |
|                 ViewState["DataType"] = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Gets or sets whether the field is visible in Insert mode.  Turn off for auto-gen'd db fields</para>
 | |
|         /// </devdoc>
 | |
|         public override bool InsertVisible {
 | |
|             get {
 | |
|                 return base.InsertVisible;
 | |
|             }
 | |
|             set {
 | |
|                 if (!_suppressPropertyThrows) {
 | |
|                     throw new NotSupportedException();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     
 | |
|         
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Gets or sets the property that determines whether the BoundField treats empty string as
 | |
|         /// null when the field values are extracted.</para>
 | |
|         /// </devdoc>
 | |
|         public override bool ConvertEmptyStringToNull {
 | |
|             get {
 | |
|                 return base.ConvertEmptyStringToNull;
 | |
|             }
 | |
|             set {
 | |
|                 if (!_suppressPropertyThrows) {
 | |
|                     throw new NotSupportedException();
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <devdoc>
 | |
|         ///    <para>Determines whether the field should display a text box.</para>
 | |
|         /// </devdoc>
 | |
|         private bool UseCheckBox {
 | |
|             get {
 | |
|                 if (!_useCheckBoxValid) {
 | |
|                     _useCheckBox = (DataType == typeof(bool) || DataType == typeof(bool?));
 | |
|                     _useCheckBoxValid = true;
 | |
|                 }
 | |
|                 return _useCheckBox;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         protected override void CopyProperties(DataControlField newField) {
 | |
|             ((AutoGeneratedField)newField).DataType = DataType;
 | |
|             _suppressPropertyThrows = true;
 | |
|             ((AutoGeneratedField)newField)._suppressPropertyThrows = true;
 | |
|             base.CopyProperties(newField);
 | |
|             _suppressPropertyThrows = false;
 | |
|             ((AutoGeneratedField)newField)._suppressPropertyThrows = false;
 | |
|         }
 | |
| 
 | |
|         protected override DataControlField CreateField() {
 | |
|             return new AutoGeneratedField(DataField);
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// Returns a value to be used for design-time rendering
 | |
|         /// </devdoc>
 | |
|         protected override object GetDesignTimeValue() {
 | |
|             if (UseCheckBox) {
 | |
|                 return true;
 | |
|             }
 | |
|             return base.GetDesignTimeValue();
 | |
|         }
 | |
|         
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// Extracts the value of the databound cell and inserts the value into the given dictionary
 | |
|         /// </devdoc>
 | |
|         public override void ExtractValuesFromCell(IOrderedDictionary dictionary, DataControlFieldCell cell, DataControlRowState rowState, bool includeReadOnly) {
 | |
|             if (UseCheckBox) {
 | |
|                 Control childControl = null;
 | |
|                 string dataField = DataField;
 | |
|                 object value = null;
 | |
|     
 | |
|                 if (cell.Controls.Count > 0) {
 | |
|                     childControl = cell.Controls[0];
 | |
|     
 | |
|                     CheckBox checkBox = childControl as CheckBox;
 | |
|                     if (checkBox != null) {
 | |
|                         if (includeReadOnly || checkBox.Enabled) {
 | |
|                             value = checkBox.Checked;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|     
 | |
|                 if (value != null) {
 | |
|                     if (dictionary.Contains(dataField)) {
 | |
|                         dictionary[dataField] = value;
 | |
|                     }
 | |
|                     else {
 | |
|                         dictionary.Add(dataField, value);
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             else {
 | |
|                 base.ExtractValuesFromCell(dictionary, cell, rowState, includeReadOnly);
 | |
|             }
 | |
|             
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
|         protected override void InitializeDataCell(DataControlFieldCell cell, DataControlRowState rowState) {
 | |
|             if (UseCheckBox) {
 | |
|                 CheckBox childControl = null;
 | |
|                 CheckBox boundControl = null;
 | |
|                 
 | |
|                 if (((rowState & DataControlRowState.Edit) != 0 && ReadOnly == false) || (rowState & DataControlRowState.Insert) != 0) {
 | |
|                     CheckBox editor = new CheckBox();
 | |
|                     childControl = editor;
 | |
|     
 | |
|                     if (DataField.Length != 0 && (rowState & DataControlRowState.Edit) != 0) {
 | |
|                         boundControl = editor;
 | |
|                     }
 | |
|                 }
 | |
|                 else if (DataField.Length != 0) {
 | |
|                     CheckBox editor = new CheckBox();
 | |
|                     editor.Enabled = false;
 | |
|                     childControl = editor;
 | |
|                     boundControl = editor;
 | |
|                 }
 | |
|                 
 | |
|                 if (childControl != null) {
 | |
|                     childControl.ToolTip = HeaderText;
 | |
|                     cell.Controls.Add(childControl);
 | |
|                 }
 | |
|                 
 | |
|                 if (boundControl != null) {
 | |
|                     boundControl.DataBinding += new EventHandler(this.OnDataBindField);
 | |
|                 }
 | |
|             }
 | |
|             else {
 | |
|                 base.InitializeDataCell(cell, rowState);
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         protected override void OnDataBindField(object sender, EventArgs e) {
 | |
|             if (UseCheckBox) {
 | |
|                 Control boundControl = (Control)sender;
 | |
|                 Control controlContainer = boundControl.NamingContainer;
 | |
|     
 | |
|     
 | |
|                 object data = GetValue(controlContainer);
 | |
|      
 | |
|                 if (!(boundControl is CheckBox)) {
 | |
|                     throw new HttpException(SR.GetString(SR.CheckBoxField_WrongControlType, DataField));
 | |
|                 }
 | |
|                 if (DataBinder.IsNull(data)) {
 | |
|                     ((CheckBox)boundControl).Checked = false;
 | |
|                 }
 | |
|                 else {
 | |
|                     if (data is Boolean) {
 | |
|                         ((CheckBox)boundControl).Checked = (Boolean)data;
 | |
|                     }
 | |
|                     else {
 | |
|                         try {
 | |
|                             ((CheckBox)boundControl).Checked = Boolean.Parse(data.ToString());
 | |
|                         }
 | |
|                         catch (FormatException fe) {
 | |
|                             throw new HttpException(SR.GetString(SR.CheckBoxField_CouldntParseAsBoolean, DataField), fe);
 | |
|                         }
 | |
|                     }                
 | |
|                 }
 | |
|             }
 | |
|             else {
 | |
|                 base.OnDataBindField(sender, e);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Override with an empty body if the field's controls all support callback.
 | |
|         ///  Otherwise, override and throw a useful error message about why the field can't support callbacks.</para>
 | |
|         /// </devdoc>
 | |
|         public override void ValidateSupportsCallback() {
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 |