You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			293 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			293 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| // <copyright file="ObjectListField.cs" company="Microsoft">
 | |
| //     Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| // </copyright>                                                                
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| using System;
 | |
| using System.Collections;
 | |
| using System.ComponentModel;
 | |
| using System.Diagnostics;
 | |
| using System.Globalization;
 | |
| using System.Web;
 | |
| using System.Web.UI;
 | |
| using System.Web.UI.WebControls;
 | |
| using System.Web.UI.HtmlControls;
 | |
| using System.Security.Permissions;
 | |
| 
 | |
| namespace System.Web.UI.MobileControls
 | |
| {
 | |
|     /*
 | |
|      * Object List Field class.
 | |
|      *
 | |
|      * Copyright (c) 2000 Microsoft Corporation
 | |
|      */
 | |
| 
 | |
|     /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField"]/*' />
 | |
|     [
 | |
|         PersistName("Field")
 | |
|     ]
 | |
|     [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
 | |
|     [Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")]
 | |
|     public sealed class ObjectListField : IStateManager
 | |
|     {
 | |
|         private StateBag _stateBag = new StateBag();
 | |
|         private bool _marked;
 | |
|         private PropertyDescriptor _dataFieldDescriptor;
 | |
|         private ObjectList _owner;
 | |
|         private bool _selfReference = false;
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.Name"]/*' />
 | |
|         [
 | |
|             DefaultValue("")
 | |
|         ]
 | |
|         public String Name
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 String s = (String)ViewState["Name"];
 | |
|                 return (s == null) ? String.Empty : s;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 ViewState["Name"] = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.DataField"]/*' />
 | |
|         [
 | |
|             DefaultValue("")
 | |
|         ]
 | |
|         public String DataField
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 String s = (String)ViewState["DataField"];
 | |
|                 return (s == null) ? String.Empty : s;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 ViewState["DataField"] = value;
 | |
|                 NotifyOwnerChange();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.DataFormatString"]/*' />
 | |
|         [
 | |
|             DefaultValue("")
 | |
|         ]
 | |
|         public String DataFormatString
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 String s = (String)ViewState["DataFormatString"];
 | |
|                 return (s == null) ? String.Empty : s;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 ViewState["DataFormatString"] = value;
 | |
|                 NotifyOwnerChange();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.Title"]/*' />
 | |
|         [
 | |
|             DefaultValue("")
 | |
|         ]
 | |
|         public String Title
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 String s = (String)ViewState["Title"];
 | |
|                 return (s == null) ? String.Empty : s;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 ViewState["Title"] = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.Visible"]/*' />
 | |
|         [
 | |
|             DefaultValue(true)
 | |
|         ]
 | |
|         public bool Visible
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 Object b = ViewState["Visible"];
 | |
|                 return (b == null) ? true : (bool)b;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 ViewState["Visible"] = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         internal bool SelfReference
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _selfReference;
 | |
|             }
 | |
|             set
 | |
|             {
 | |
|                 _selfReference = value;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         internal String UniqueID
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 Object o = ViewState["Name"];
 | |
|                 if (o != null)
 | |
|                 {
 | |
|                     return (String)o;
 | |
|                 }
 | |
|                 return (String)ViewState["DataField"];
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private void NotifyOwnerChange()
 | |
|         {
 | |
|             // Only called if databinding behavior of the field changes.
 | |
|             if (_owner != null)
 | |
|             {
 | |
|                 _owner.OnFieldChanged(false);   // fieldAddedOrRemoved = false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         private StateBag ViewState
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _stateBag;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         internal void SetOwner(ObjectList owner) {
 | |
|             _owner = owner;
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.DataBindItem"]/*' />
 | |
|         public void DataBindItem(int fieldIndex, ObjectListItem item)
 | |
|         {
 | |
|             Object dataItem = item.DataItem;
 | |
|             if (dataItem == null)
 | |
|             {
 | |
|                 return;
 | |
|             }
 | |
|                 
 | |
|             if (!SelfReference)
 | |
|             {
 | |
|                 String dataField = DataField;
 | |
|                 if (dataField.Length == 0)
 | |
|                 {
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 _dataFieldDescriptor = TypeDescriptor.GetProperties(dataItem).Find(dataField, true);
 | |
|                 if (_dataFieldDescriptor == null && !_owner.MobilePage.DesignMode)
 | |
|                 {
 | |
|                     throw new Exception(
 | |
|                         SR.GetString(SR.ObjectListField_DataFieldNotFound, dataField));
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             Object data;
 | |
|             if (_dataFieldDescriptor != null)
 | |
|             {
 | |
|                 data = _dataFieldDescriptor.GetValue(dataItem);
 | |
|             }
 | |
|             // Use fake databound text if the datasource is not accessible at designtime.
 | |
|             else if (_owner.MobilePage.DesignMode)
 | |
|             {
 | |
|                 data = SR.GetString(SR.ObjectListField_DataBoundText);
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 Debug.Assert(SelfReference, "Shouldn't get this far if !SelfReference");
 | |
|                 data = dataItem;
 | |
|             }
 | |
| 
 | |
|             String dataText;
 | |
|             if ((data != null) && (data != System.DBNull.Value))
 | |
|             {
 | |
|                 String dataFormatString = DataFormatString;
 | |
|                 if (dataFormatString.Length > 0)
 | |
|                 {
 | |
|                     dataText = String.Format(CultureInfo.InvariantCulture, dataFormatString, data);
 | |
|                 }
 | |
|                 else
 | |
|                 {
 | |
|                     dataText = data.ToString();
 | |
|                 }
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 dataText = String.Empty;
 | |
|             }
 | |
|             item[fieldIndex] = dataText;
 | |
|         }
 | |
| 
 | |
|         /////////////////////////////////////////////////////////////////////////
 | |
|         //  STATE MANAGEMENT
 | |
|         /////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.IStateManager.IsTrackingViewState"]/*' />
 | |
|         /// <internalonly/>
 | |
|         bool IStateManager.IsTrackingViewState
 | |
|         {
 | |
|             get
 | |
|             {
 | |
|                 return _marked;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.IStateManager.TrackViewState"]/*' />
 | |
|         /// <internalonly/>
 | |
|         void IStateManager.TrackViewState()
 | |
|         {
 | |
|             _marked = true;
 | |
|             ((IStateManager)ViewState).TrackViewState();
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.IStateManager.LoadViewState"]/*' />
 | |
|         /// <internalonly/>
 | |
|         void IStateManager.LoadViewState(Object state)
 | |
|         {
 | |
|             if (state != null)
 | |
|             {
 | |
|                 ((IStateManager)ViewState).LoadViewState(state);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <include file='doc\ObjectListField.uex' path='docs/doc[@for="ObjectListField.IStateManager.SaveViewState"]/*' />
 | |
|         /// <internalonly/>
 | |
|         Object IStateManager.SaveViewState()
 | |
|         {
 | |
|             return ((IStateManager)ViewState).SaveViewState();
 | |
|         }
 | |
| 
 | |
|         internal void SetDirty()
 | |
|         {
 | |
|             // VSWHIDBEY 236464. The bag needs to be set dirty not individual items.
 | |
|             _stateBag.SetDirty(true);
 | |
| /*
 | |
|             foreach (StateItem item in _stateBag.Values)
 | |
|             {
 | |
|                 item.IsDirty = true;
 | |
|             }
 | |
| */
 | |
|         }
 | |
| 
 | |
|         internal void ClearViewState()
 | |
|         {
 | |
|             ViewState.Clear();
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 | |
| 
 |