Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / ndp / fx / src / DataWebControls / System / Data / WebControls / EntityDataSourceWrapper.cs / 1 / EntityDataSourceWrapper.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Data; using System.Configuration; using System.ComponentModel; using System.Data.Common; using System.Data.Metadata.Edm; using System.Reflection; using System.Data.Objects; using System.Data.Objects.DataClasses; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Collections.ObjectModel; using System.Text; using System.Web.UI; namespace System.Web.UI.WebControls { ////// Wraps an entity displayed in the data source in an ICustomTypeDescriptor /// implementation that flattens complex types and exposes references. /// internal class EntityDataSourceWrapper : ICustomTypeDescriptor { private readonly EntityDataSourceWrapperCollection _collection; private readonly ObjectStateEntry _stateEntry; internal EntityDataSourceWrapper(EntityDataSourceWrapperCollection collection, object trackedEntity) { EntityDataSourceUtil.CheckArgumentNull(collection, "collection"); EntityDataSourceUtil.CheckArgumentNull(trackedEntity, "trackedEntity"); this._collection = collection; // retrieve state entry if (!this._collection.Context.ObjectStateManager.TryGetObjectStateEntry(trackedEntity, out _stateEntry)) { throw new ArgumentException(Strings.ComponentNotFromProperCollection, "trackedEntity"); } } ////// Gets entity wrapped by this type descriptor. /// internal object WrappedEntity { get { return this._stateEntry.Entity; } } ////// Gets collection containing this wrapper. /// internal EntityDataSourceWrapperCollection Collection { get { return this._collection; } } #region ICustomTypeDescriptor Implementation System.ComponentModel.AttributeCollection System.ComponentModel.ICustomTypeDescriptor.GetAttributes() { return new System.ComponentModel.AttributeCollection(); } string ICustomTypeDescriptor.GetClassName() { return null; } string ICustomTypeDescriptor.GetComponentName() { return null; } TypeConverter ICustomTypeDescriptor.GetConverter() { return null; } EventDescriptor ICustomTypeDescriptor.GetDefaultEvent() { return null; } PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty() { return null; } object ICustomTypeDescriptor.GetEditor(Type editorBaseType) { return null; } EventDescriptorCollection ICustomTypeDescriptor.GetEvents() { return null; } EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes) { return null; } public PropertyDescriptorCollection GetProperties() { return ((ITypedList)this._collection).GetItemProperties(null); } PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes) { return ((ICustomTypeDescriptor)this).GetProperties(); } object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd) { return this.WrappedEntity; } #endregion ICustomTypeDescriptor Implementation ////// Use this method to set the properties on the wrapped entity /// /// /// /// internal void SetAllProperties(DictionarypropertiesFromViewState, bool overwriteSameValue, ref Dictionary propertySettingExceptionsCaught) { // We aggregate the reference descriptors rather than setting them directly // to account for compound keys (we need all components of the key to create // an EntityKey that can be set on the EntityReference) var referenceList = new List >(); foreach (EntityDataSourceWrapperPropertyDescriptor descriptor in _collection.AllPropertyDescriptors) { // figure out which display name to match for this descriptor string displayName = descriptor.Column.DisplayName; // if we have a controlling column, use its display name instead if (descriptor.Column.ControllingColumn != null) { displayName = descriptor.Column.ControllingColumn.DisplayName; } object value; if (propertiesFromViewState.TryGetValue(displayName, out value)) { // get all changed ReferencePropertyDescriptor from ViewState EntityDataSourceReferenceKeyColumn referenceColumn = descriptor.Column as EntityDataSourceReferenceKeyColumn; // convert the value as needed object adjustedValue = EntityDataSourceUtil.ConvertType(value, descriptor.PropertyType, descriptor.DisplayName); if (null != referenceColumn) { referenceList.Add(new KeyValuePair ( referenceColumn, adjustedValue)); continue; } if (overwriteSameValue || adjustedValue != descriptor.GetValue(this)) { if (EntityDataSourceUtil.NullCanBeAssignedTo(descriptor.PropertyType) || null != adjustedValue) { try { descriptor.SetValue(this, adjustedValue); } catch (Exception e) { // The property descriptor uses reflection to set the property. Therefore, the inner exception contains the actual message. Exception exceptionToThrow = e; if (e.InnerException != null) { exceptionToThrow = e.InnerException; } if (null == propertySettingExceptionsCaught) { propertySettingExceptionsCaught = new Dictionary (); } propertySettingExceptionsCaught.Add(descriptor.DisplayName, exceptionToThrow); } } } } } // aggregate setting for EntityKey SetEntityKeyProperties(referenceList, overwriteSameValue); } private void SetEntityKeyProperties( List > referenceList, bool overwriteSameValue) { EntityDataSourceUtil.CheckArgumentNull(referenceList, "referenceList"); var groups = referenceList.GroupBy(r => r.Key.Group); foreach (var group in groups) { Dictionary partialKeys = new Dictionary (); foreach (KeyValuePair reference in group) { // convert the value as needed EntityDataSourceReferenceKeyColumn column = reference.Key; object keyValue = reference.Value; if (null == keyValue) { partialKeys = null; break; } partialKeys.Add(column.KeyMember.Name, keyValue); } // we only set the entitykey for once, although there might be more than one // properties descriptor associated with the same entitykey group.Key.SetKeyValues(this, partialKeys); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //---------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner [....] // @backupOwner [....] //--------------------------------------------------------------------- using System; using System.Data; using System.Configuration; using System.ComponentModel; using System.Data.Common; using System.Data.Metadata.Edm; using System.Reflection; using System.Data.Objects; using System.Data.Objects.DataClasses; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Collections.ObjectModel; using System.Text; using System.Web.UI; namespace System.Web.UI.WebControls { ////// Wraps an entity displayed in the data source in an ICustomTypeDescriptor /// implementation that flattens complex types and exposes references. /// internal class EntityDataSourceWrapper : ICustomTypeDescriptor { private readonly EntityDataSourceWrapperCollection _collection; private readonly ObjectStateEntry _stateEntry; internal EntityDataSourceWrapper(EntityDataSourceWrapperCollection collection, object trackedEntity) { EntityDataSourceUtil.CheckArgumentNull(collection, "collection"); EntityDataSourceUtil.CheckArgumentNull(trackedEntity, "trackedEntity"); this._collection = collection; // retrieve state entry if (!this._collection.Context.ObjectStateManager.TryGetObjectStateEntry(trackedEntity, out _stateEntry)) { throw new ArgumentException(Strings.ComponentNotFromProperCollection, "trackedEntity"); } } ////// Gets entity wrapped by this type descriptor. /// internal object WrappedEntity { get { return this._stateEntry.Entity; } } ////// Gets collection containing this wrapper. /// internal EntityDataSourceWrapperCollection Collection { get { return this._collection; } } #region ICustomTypeDescriptor Implementation System.ComponentModel.AttributeCollection System.ComponentModel.ICustomTypeDescriptor.GetAttributes() { return new System.ComponentModel.AttributeCollection(); } string ICustomTypeDescriptor.GetClassName() { return null; } string ICustomTypeDescriptor.GetComponentName() { return null; } TypeConverter ICustomTypeDescriptor.GetConverter() { return null; } EventDescriptor ICustomTypeDescriptor.GetDefaultEvent() { return null; } PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty() { return null; } object ICustomTypeDescriptor.GetEditor(Type editorBaseType) { return null; } EventDescriptorCollection ICustomTypeDescriptor.GetEvents() { return null; } EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes) { return null; } public PropertyDescriptorCollection GetProperties() { return ((ITypedList)this._collection).GetItemProperties(null); } PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes) { return ((ICustomTypeDescriptor)this).GetProperties(); } object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd) { return this.WrappedEntity; } #endregion ICustomTypeDescriptor Implementation ////// Use this method to set the properties on the wrapped entity /// /// /// /// internal void SetAllProperties(DictionarypropertiesFromViewState, bool overwriteSameValue, ref Dictionary propertySettingExceptionsCaught) { // We aggregate the reference descriptors rather than setting them directly // to account for compound keys (we need all components of the key to create // an EntityKey that can be set on the EntityReference) var referenceList = new List >(); foreach (EntityDataSourceWrapperPropertyDescriptor descriptor in _collection.AllPropertyDescriptors) { // figure out which display name to match for this descriptor string displayName = descriptor.Column.DisplayName; // if we have a controlling column, use its display name instead if (descriptor.Column.ControllingColumn != null) { displayName = descriptor.Column.ControllingColumn.DisplayName; } object value; if (propertiesFromViewState.TryGetValue(displayName, out value)) { // get all changed ReferencePropertyDescriptor from ViewState EntityDataSourceReferenceKeyColumn referenceColumn = descriptor.Column as EntityDataSourceReferenceKeyColumn; // convert the value as needed object adjustedValue = EntityDataSourceUtil.ConvertType(value, descriptor.PropertyType, descriptor.DisplayName); if (null != referenceColumn) { referenceList.Add(new KeyValuePair ( referenceColumn, adjustedValue)); continue; } if (overwriteSameValue || adjustedValue != descriptor.GetValue(this)) { if (EntityDataSourceUtil.NullCanBeAssignedTo(descriptor.PropertyType) || null != adjustedValue) { try { descriptor.SetValue(this, adjustedValue); } catch (Exception e) { // The property descriptor uses reflection to set the property. Therefore, the inner exception contains the actual message. Exception exceptionToThrow = e; if (e.InnerException != null) { exceptionToThrow = e.InnerException; } if (null == propertySettingExceptionsCaught) { propertySettingExceptionsCaught = new Dictionary (); } propertySettingExceptionsCaught.Add(descriptor.DisplayName, exceptionToThrow); } } } } } // aggregate setting for EntityKey SetEntityKeyProperties(referenceList, overwriteSameValue); } private void SetEntityKeyProperties( List > referenceList, bool overwriteSameValue) { EntityDataSourceUtil.CheckArgumentNull(referenceList, "referenceList"); var groups = referenceList.GroupBy(r => r.Key.Group); foreach (var group in groups) { Dictionary partialKeys = new Dictionary (); foreach (KeyValuePair reference in group) { // convert the value as needed EntityDataSourceReferenceKeyColumn column = reference.Key; object keyValue = reference.Value; if (null == keyValue) { partialKeys = null; break; } partialKeys.Add(column.KeyMember.Name, keyValue); } // we only set the entitykey for once, although there might be more than one // properties descriptor associated with the same entitykey group.Key.SetKeyValues(this, partialKeys); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- sqlcontext.cs
- DataGridRelationshipRow.cs
- Activator.cs
- Rotation3DKeyFrameCollection.cs
- CTreeGenerator.cs
- ProcessModuleCollection.cs
- DependencyPropertyKey.cs
- LogicalExpr.cs
- SqlGenerator.cs
- TextBox.cs
- ProvidePropertyAttribute.cs
- DbConnectionPool.cs
- HtmlTitle.cs
- EntityCommand.cs
- DuplicateWaitObjectException.cs
- MediaElementAutomationPeer.cs
- EntityDataSourceContainerNameItem.cs
- CodeArgumentReferenceExpression.cs
- Vector3DAnimationUsingKeyFrames.cs
- SafeSecurityHandles.cs
- OutputCacheSection.cs
- PrincipalPermission.cs
- IntegrationExceptionEventArgs.cs
- CommaDelimitedStringAttributeCollectionConverter.cs
- DES.cs
- CryptoApi.cs
- Int16KeyFrameCollection.cs
- FileSystemWatcher.cs
- DependencyPropertyConverter.cs
- DetailsView.cs
- StorageComplexTypeMapping.cs
- TraceSection.cs
- SiteMapNode.cs
- GuidConverter.cs
- TransactionFilter.cs
- PolyBezierSegment.cs
- LicFileLicenseProvider.cs
- Nullable.cs
- EventMappingSettings.cs
- TextDocumentView.cs
- NamespaceCollection.cs
- FigureParagraph.cs
- TypeSystem.cs
- AssemblyName.cs
- X509Certificate2.cs
- ReliabilityContractAttribute.cs
- SecurityImpersonationBehavior.cs
- StylusPointProperties.cs
- FontStretches.cs
- SoapSchemaImporter.cs
- webbrowsersite.cs
- DataServiceQueryProvider.cs
- MouseWheelEventArgs.cs
- SoapIncludeAttribute.cs
- RequestUriProcessor.cs
- MoveSizeWinEventHandler.cs
- NameTable.cs
- ManagementOptions.cs
- _ProxyChain.cs
- XmlKeywords.cs
- ListControl.cs
- HostedTransportConfigurationBase.cs
- CmsInterop.cs
- FigureParaClient.cs
- XslCompiledTransform.cs
- ExceptionUtil.cs
- SortDescriptionCollection.cs
- LostFocusEventManager.cs
- SafeBitVector32.cs
- DbProviderFactories.cs
- WpfWebRequestHelper.cs
- ConstructorNeedsTagAttribute.cs
- GifBitmapDecoder.cs
- IndentedWriter.cs
- formatter.cs
- FixedPageStructure.cs
- DataGridColumnCollection.cs
- ChtmlLinkAdapter.cs
- IISUnsafeMethods.cs
- PartialToken.cs
- TreePrinter.cs
- PeerPresenceInfo.cs
- ScriptingJsonSerializationSection.cs
- MenuItemBinding.cs
- SqlDataSourceConfigureFilterForm.cs
- EditorZoneBase.cs
- DbMetaDataCollectionNames.cs
- LinkButton.cs
- BaseParaClient.cs
- SelectionRange.cs
- LineVisual.cs
- Translator.cs
- NativeRightsManagementAPIsStructures.cs
- LiteralControl.cs
- InternalCache.cs
- ShimAsPublicXamlType.cs
- ManagementBaseObject.cs
- RecipientInfo.cs
- RecordsAffectedEventArgs.cs
- ToolStripOverflow.cs