You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			236 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			236 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| // <copyright file="BoundColumn.cs" company="Microsoft">
 | |
| //     Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| // </copyright>                                                                
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| namespace System.Web.UI.WebControls {
 | |
| 
 | |
|     using System;
 | |
|     using System.Collections;    
 | |
|     using System.ComponentModel;
 | |
|     using System.Globalization;
 | |
|     using System.Web;
 | |
|     using System.Web.UI;
 | |
|     using System.Web.Util;
 | |
| 
 | |
|     /// <devdoc>
 | |
|     /// <para>Creates a column bounded to a data field in a <see cref='System.Web.UI.WebControls.DataGrid'/>.</para>
 | |
|     /// </devdoc>
 | |
|     public class BoundColumn : DataGridColumn {
 | |
|         
 | |
| 
 | |
|         /// <devdoc>
 | |
|         ///    <para>Specifies a string that represents "this". This field is read-only. </para>
 | |
|         /// </devdoc>
 | |
|         public static readonly string thisExpr = "!";
 | |
| 
 | |
|         private PropertyDescriptor boundFieldDesc;
 | |
|         private bool boundFieldDescValid;
 | |
|         private string boundField;
 | |
|         private string formatting;
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Initializes a new instance of a <see cref='System.Web.UI.WebControls.BoundColumn'/> class.</para>
 | |
|         /// </devdoc>
 | |
|         public BoundColumn() {
 | |
|         }
 | |
|         
 | |
|         
 | |
| 
 | |
|         /// <devdoc>
 | |
|         ///    <para> Gets or sets the field name from the data model bound to this column.</para>
 | |
|         /// </devdoc>
 | |
|         [
 | |
|             WebCategory("Data"),
 | |
|             DefaultValue(""),
 | |
|             WebSysDescription(SR.BoundColumn_DataField)
 | |
|         ]
 | |
|         public virtual string DataField {
 | |
|             get {
 | |
|                 object o = ViewState["DataField"];
 | |
|                 if (o != null)
 | |
|                     return (string)o;
 | |
|                 return String.Empty;
 | |
|             }
 | |
|             set {
 | |
|                 ViewState["DataField"] = value;
 | |
|                 OnColumnChanged();
 | |
|             }
 | |
|         }
 | |
|         
 | |
| 
 | |
|         /// <devdoc>
 | |
|         ///    <para>Gets or sets the display format of data in this
 | |
|         ///       column.</para>
 | |
|         /// </devdoc>
 | |
|         [
 | |
|             WebCategory("Behavior"),
 | |
|             DefaultValue(""),
 | |
|             WebSysDescription(SR.BoundColumn_DataFormatString)
 | |
|         ]
 | |
|         public virtual string DataFormatString {
 | |
|             get {
 | |
|                 object o = ViewState["DataFormatString"];
 | |
|                 if (o != null)
 | |
|                     return (string)o;
 | |
|                 return String.Empty;
 | |
|             }
 | |
|             set {
 | |
|                 ViewState["DataFormatString"] = value;
 | |
|                 OnColumnChanged();
 | |
|             }
 | |
|         }
 | |
|         
 | |
| 
 | |
|         /// <devdoc>
 | |
|         ///    <para>Gets or sets the property that prevents modification to data
 | |
|         ///       in this column.</para>
 | |
|         /// </devdoc>
 | |
|         [
 | |
|             WebCategory("Behavior"),
 | |
|             DefaultValue(false),
 | |
|             WebSysDescription(SR.BoundColumn_ReadOnly)
 | |
|         ]
 | |
|         public virtual bool ReadOnly {
 | |
|             get {
 | |
|                 object o = ViewState["ReadOnly"];
 | |
|                 if (o != null)
 | |
|                     return (bool)o;
 | |
|                 return false;
 | |
|             }
 | |
|             set {
 | |
|                 ViewState["ReadOnly"] = value;
 | |
|                 OnColumnChanged();
 | |
|             }
 | |
|         }
 | |
|         
 | |
|         
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         protected virtual string FormatDataValue(object dataValue) {
 | |
|             string formattedValue = String.Empty;
 | |
| 
 | |
|             if (!DataBinder.IsNull(dataValue)) {
 | |
|                 if (formatting.Length == 0) {
 | |
|                     formattedValue = dataValue.ToString();
 | |
|                 }
 | |
|                 else {
 | |
|                     formattedValue = String.Format(CultureInfo.CurrentCulture, formatting, dataValue);
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return formattedValue;
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         public override void Initialize() {
 | |
|             base.Initialize();
 | |
| 
 | |
|             boundFieldDesc = null;
 | |
|             boundFieldDescValid = false;
 | |
| 
 | |
|             boundField = DataField;
 | |
|             formatting = DataFormatString;
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// <para>Initializes a cell in the DataGridColumn.</para>
 | |
|         /// </devdoc>
 | |
|         public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType) {
 | |
|             base.InitializeCell(cell, columnIndex, itemType);
 | |
|             
 | |
|             Control childControl = null;
 | |
|             Control boundControl = null;
 | |
|             
 | |
|             switch (itemType) {
 | |
|                 case ListItemType.Header:
 | |
|                 case ListItemType.Footer:
 | |
|                     break;
 | |
| 
 | |
|                 case ListItemType.Item:
 | |
|                 case ListItemType.AlternatingItem:
 | |
|                 case ListItemType.SelectedItem:
 | |
|                     if (DataField.Length != 0) {
 | |
|                         boundControl = cell;
 | |
|                     }
 | |
|                     break;
 | |
|                     
 | |
|                 case ListItemType.EditItem:
 | |
|                     if (ReadOnly == true) {
 | |
|                         goto case ListItemType.Item;
 | |
|                     }
 | |
|                     else {
 | |
|                         // 
 | |
|                         TextBox editor = new TextBox();
 | |
|                         childControl = editor;
 | |
|                         
 | |
|                         if (boundField.Length != 0) {
 | |
|                             boundControl = editor;
 | |
|                         }
 | |
|                     }
 | |
|                     break;
 | |
|             }
 | |
|             
 | |
|             if (childControl != null) {
 | |
|                 cell.Controls.Add(childControl);
 | |
|             }
 | |
| 
 | |
|             if (boundControl != null) {
 | |
|                 boundControl.DataBinding += new EventHandler(this.OnDataBindColumn);
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         private void OnDataBindColumn(object sender, EventArgs e) {
 | |
|             Debug.Assert(DataField.Length != 0, "Shouldn't be DataBinding without a DataField");
 | |
| 
 | |
|             Control boundControl = (Control)sender;
 | |
|             DataGridItem item = (DataGridItem)boundControl.NamingContainer;
 | |
|             object dataItem = item.DataItem;
 | |
| 
 | |
|             if (boundFieldDescValid == false) {
 | |
|                 if (!boundField.Equals(thisExpr)) {
 | |
|                     boundFieldDesc = TypeDescriptor.GetProperties(dataItem).Find(boundField, true);
 | |
|                     if ((boundFieldDesc == null) && !DesignMode) {
 | |
|                         throw new HttpException(SR.GetString(SR.Field_Not_Found, boundField));
 | |
|                     }
 | |
|                 }
 | |
|                 boundFieldDescValid = true;
 | |
|             }
 | |
|             
 | |
|             object data = dataItem;
 | |
|             string dataValue;
 | |
| 
 | |
|             if ((boundFieldDesc == null) && DesignMode) {
 | |
|                 dataValue = SR.GetString(SR.Sample_Databound_Text);
 | |
|             }
 | |
|             else {
 | |
|                 if (boundFieldDesc != null) {
 | |
|                     data = boundFieldDesc.GetValue(dataItem);
 | |
|                 }
 | |
|                 dataValue = FormatDataValue(data);
 | |
|             }
 | |
| 
 | |
|             if (boundControl is TableCell) {
 | |
|                 if (dataValue.Length == 0) {
 | |
|                     dataValue = " ";
 | |
|                 }
 | |
|                 ((TableCell)boundControl).Text = dataValue;
 | |
|             }
 | |
|             else {
 | |
|                 Debug.Assert(boundControl is TextBox, "Expected the bound control to be a TextBox");
 | |
|                 ((TextBox)boundControl).Text = dataValue;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 |