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
- TextTreeNode.cs
- ButtonFieldBase.cs
- ToolStripItem.cs
- InternalBase.cs
- TreeViewImageIndexConverter.cs
- DropTarget.cs
- TemplateApplicationHelper.cs
- SpecialFolderEnumConverter.cs
- AliasExpr.cs
- CompilationRelaxations.cs
- Size3D.cs
- DocumentApplicationState.cs
- PageContentCollection.cs
- IconConverter.cs
- SuppressIldasmAttribute.cs
- HttpCachePolicyElement.cs
- validationstate.cs
- EventArgs.cs
- WindowsGrip.cs
- DecoderFallback.cs
- WindowsGrip.cs
- ApplicationException.cs
- SafeLocalMemHandle.cs
- ConfigurationLocation.cs
- sqlstateclientmanager.cs
- ItemList.cs
- HandoffBehavior.cs
- EncoderBestFitFallback.cs
- DbInsertCommandTree.cs
- CodeAccessPermission.cs
- Cell.cs
- ValueTable.cs
- DependencyPropertyConverter.cs
- BuildTopDownAttribute.cs
- TargetPerspective.cs
- basenumberconverter.cs
- ActivityCodeDomSerializer.cs
- BaseTreeIterator.cs
- WindowsSlider.cs
- SystemThemeKey.cs
- relpropertyhelper.cs
- RightNameExpirationInfoPair.cs
- EdmConstants.cs
- _NativeSSPI.cs
- HeaderUtility.cs
- AppDomainFactory.cs
- SystemTcpStatistics.cs
- SafeNativeMethodsMilCoreApi.cs
- ItemMap.cs
- SchemaElementDecl.cs
- XmlILAnnotation.cs
- PropertyCondition.cs
- CollectionViewSource.cs
- PersistenceTypeAttribute.cs
- DisableDpiAwarenessAttribute.cs
- XmlKeywords.cs
- ADMembershipProvider.cs
- CustomPopupPlacement.cs
- TraceUtility.cs
- shaper.cs
- SpeechSeg.cs
- WebBrowserEvent.cs
- ProcessProtocolHandler.cs
- CacheMemory.cs
- X509Extension.cs
- InternalResources.cs
- SafeArchiveContext.cs
- PenThread.cs
- SmtpNegotiateAuthenticationModule.cs
- RootProfilePropertySettingsCollection.cs
- AffineTransform3D.cs
- MachineKeyConverter.cs
- UnsafeNativeMethods.cs
- EntitySetDataBindingList.cs
- PasswordRecoveryAutoFormat.cs
- Visual3D.cs
- SqlStream.cs
- ForeignKeyConstraint.cs
- _Connection.cs
- Fault.cs
- X509ChainPolicy.cs
- Shared.cs
- SmiMetaDataProperty.cs
- Point.cs
- SqlConnectionPoolProviderInfo.cs
- SqlNotificationRequest.cs
- ForceCopyBuildProvider.cs
- SemanticResultKey.cs
- ColumnPropertiesGroup.cs
- QilParameter.cs
- GradientStop.cs
- ParserOptions.cs
- Line.cs
- StorageMappingItemCollection.cs
- DataGridLinkButton.cs
- InkCanvasSelection.cs
- XmlIlVisitor.cs
- TableItemProviderWrapper.cs
- ContextBase.cs
- ApplicationException.cs