Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / DynamicData / DynamicData / ModelProviders / DLinqTableProvider.cs / 1305376 / DLinqTableProvider.cs
using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data.Linq.Mapping; using System.Linq; using System.Linq.Expressions; using System.Reflection; namespace System.Web.DynamicData.ModelProviders { internal sealed class DLinqTableProvider : TableProvider { private ReadOnlyCollection_roColumns; private List _columns; private MetaType _rowType; private PropertyInfo _prop; public DLinqTableProvider(DLinqDataModelProvider dataModel, MetaType rowType, string name, PropertyInfo prop) : base(dataModel) { _prop = prop; _rowType = rowType; Name = name; DataContextPropertyName = prop.Name; EntityType = rowType.Type; ParentEntityType = rowType.InheritanceBase != null ? rowType.InheritanceBase.Type : null; RootEntityType = rowType.Table.RowType.Type; _columns = new List (); var members = new List (rowType.DataMembers); // Add in base-class-first order (not the typical derived-class-first order) foreach (PropertyInfo propInfo in GetOrderedProperties(rowType.Type)) { MetaDataMember member = members.FirstOrDefault(m => m.Member.Name == propInfo.Name); if (member != null) { AddColumn(dataModel, member, propInfo); members.Remove(member); } } // Anything we might've missed, tack it onto the end foreach (MetaDataMember member in members) { AddColumn(dataModel, member, (PropertyInfo)member.Member); } _roColumns = new ReadOnlyCollection (_columns); } private void AddColumn(DLinqDataModelProvider dataModel, MetaDataMember member, PropertyInfo propInfo) { var publicGetAccessor = propInfo.GetGetMethod(); if (publicGetAccessor == null) { // the property at least needs to have a public getter, otherwise databinding will not work return; } DLinqColumnProvider column = new DLinqColumnProvider(this, member); _columns.Add(column); if (!dataModel.ColumnLookup.ContainsKey(propInfo)) dataModel.ColumnLookup[propInfo] = column; } private IEnumerable GetOrderedProperties(Type type) { if (type == null) return new PropertyInfo[0]; PropertyInfo[] props = type.GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance); return GetOrderedProperties(type.BaseType).Concat(props); } internal void Initialize() { _columns.ForEach(c => ((DLinqColumnProvider)c).Initialize()); _columns.RemoveAll(c => ((DLinqColumnProvider)c).ShouldRemove); } #region IEntity Members public override IQueryable GetQuery(object context) { return (IQueryable)_prop.GetValue(context, null); } public override ReadOnlyCollection Columns { get { return _roColumns; } } #endregion } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EntityDataSourceChangingEventArgs.cs
- SqlCachedBuffer.cs
- SmiContext.cs
- DataGridViewCellCancelEventArgs.cs
- FileAuthorizationModule.cs
- TypedTableBase.cs
- ClientConfigurationHost.cs
- MatrixAnimationBase.cs
- PointCollection.cs
- UnmanagedHandle.cs
- ExpandoObject.cs
- PackageStore.cs
- TreeSet.cs
- HtmlUtf8RawTextWriter.cs
- MimeMapping.cs
- DataSourceView.cs
- RestHandlerFactory.cs
- ServiceContractAttribute.cs
- BinaryWriter.cs
- cookieexception.cs
- InternalsVisibleToAttribute.cs
- AQNBuilder.cs
- ComboBox.cs
- RefType.cs
- StringStorage.cs
- EnumDataContract.cs
- PublishLicense.cs
- _WebProxyDataBuilder.cs
- ToolStripGripRenderEventArgs.cs
- TextContainer.cs
- Brush.cs
- XamlGridLengthSerializer.cs
- AuthenticatingEventArgs.cs
- MissingFieldException.cs
- UnsafeNativeMethods.cs
- LinkUtilities.cs
- SplineKeyFrames.cs
- RtfControls.cs
- ServicePointManagerElement.cs
- ObjectQueryState.cs
- ExpressionReplacer.cs
- RadioButtonPopupAdapter.cs
- sqlcontext.cs
- SqlBulkCopyColumnMappingCollection.cs
- PartitionResolver.cs
- ListChunk.cs
- SmtpTransport.cs
- QilExpression.cs
- StatusStrip.cs
- DependencyProperty.cs
- OpenTypeMethods.cs
- StorageEndPropertyMapping.cs
- SamlConstants.cs
- X509ChainPolicy.cs
- BaseComponentEditor.cs
- PropertyPathConverter.cs
- TextServicesCompartmentEventSink.cs
- StateMachine.cs
- UnsafeNativeMethods.cs
- ThrowHelper.cs
- ControlIdConverter.cs
- ObjectDataSourceDisposingEventArgs.cs
- ConstraintConverter.cs
- MenuStrip.cs
- SeverityFilter.cs
- KeyValueConfigurationElement.cs
- EntityDescriptor.cs
- XmlValueConverter.cs
- Substitution.cs
- MatrixTransform.cs
- PartialCachingControl.cs
- NativeMethods.cs
- BufferModeSettings.cs
- TreeViewCancelEvent.cs
- TableRowsCollectionEditor.cs
- DataGridViewControlCollection.cs
- StylesEditorDialog.cs
- OciLobLocator.cs
- RowVisual.cs
- OrderedDictionary.cs
- TextRenderer.cs
- OverflowException.cs
- DictionaryContent.cs
- MouseCaptureWithinProperty.cs
- EntityDataSourceUtil.cs
- SchemaImporterExtensionElementCollection.cs
- FixedSOMTable.cs
- TypeLibConverter.cs
- TraceSource.cs
- CorruptStoreException.cs
- precedingsibling.cs
- TimeSpan.cs
- SafeNativeMethods.cs
- ResourceManagerWrapper.cs
- Matrix.cs
- WorkflowItemPresenter.cs
- SerializerDescriptor.cs
- TrustLevelCollection.cs
- MenuTracker.cs
- CapabilitiesUse.cs