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
- __Filters.cs
- FrameAutomationPeer.cs
- TextViewSelectionProcessor.cs
- XpsImageSerializationService.cs
- Helpers.cs
- DataGridCheckBoxColumn.cs
- BaseCAMarshaler.cs
- FormViewModeEventArgs.cs
- ExpandedWrapper.cs
- Win32PrintDialog.cs
- ChtmlCommandAdapter.cs
- UTF32Encoding.cs
- ReferenceEqualityComparer.cs
- ChtmlTextWriter.cs
- SignatureToken.cs
- AssemblyBuilderData.cs
- X509DefaultServiceCertificateElement.cs
- PriorityRange.cs
- ClientFormsAuthenticationCredentials.cs
- RecognizedWordUnit.cs
- ObjectDataSourceMethodEventArgs.cs
- XmlNamedNodeMap.cs
- CompModSwitches.cs
- TerminatorSinks.cs
- CodePageEncoding.cs
- TransformDescriptor.cs
- Util.cs
- CompilerHelpers.cs
- WebPartUtil.cs
- Scheduler.cs
- LayoutTable.cs
- EventManager.cs
- XmlSchemaNotation.cs
- TraceSection.cs
- TraceSection.cs
- Error.cs
- RequestCacheManager.cs
- LineServicesCallbacks.cs
- Page.cs
- OptimizedTemplateContentHelper.cs
- SrgsElementFactoryCompiler.cs
- WebSysDefaultValueAttribute.cs
- Composition.cs
- Base64Encoder.cs
- RuntimeArgument.cs
- EventProviderWriter.cs
- SourceChangedEventArgs.cs
- CodeNamespace.cs
- BuildDependencySet.cs
- CodeSnippetStatement.cs
- ListViewDataItem.cs
- _CacheStreams.cs
- Perspective.cs
- SqlServer2KCompatibilityCheck.cs
- XmlWrappingReader.cs
- Math.cs
- _Rfc2616CacheValidators.cs
- InheritedPropertyChangedEventArgs.cs
- CodeTypeParameterCollection.cs
- FrameworkContentElement.cs
- TokenBasedSetEnumerator.cs
- HttpClientCertificate.cs
- StoragePropertyMapping.cs
- OracleEncoding.cs
- PackageDigitalSignatureManager.cs
- CultureTable.cs
- ReaderWriterLockSlim.cs
- WindowsListView.cs
- DesignerExtenders.cs
- ActivityExecutorDelegateInfo.cs
- InfoCardAsymmetricCrypto.cs
- NavigationWindowAutomationPeer.cs
- MailWriter.cs
- CodeSubDirectory.cs
- UriTemplateClientFormatter.cs
- WriteStateInfoBase.cs
- UpdateTranslator.cs
- ControlIdConverter.cs
- BitmapInitialize.cs
- ComplexLine.cs
- Subset.cs
- TabItemWrapperAutomationPeer.cs
- CssClassPropertyAttribute.cs
- TimeSpanFormat.cs
- ObservableDictionary.cs
- CharacterHit.cs
- StringDictionaryWithComparer.cs
- TextPointerBase.cs
- CopyNodeSetAction.cs
- HebrewCalendar.cs
- ExtensionDataReader.cs
- DataGridViewCellValueEventArgs.cs
- SafeEventLogReadHandle.cs
- ObjectDataSourceDisposingEventArgs.cs
- TextTreeRootTextBlock.cs
- QueryInterceptorAttribute.cs
- ExpressionNormalizer.cs
- CategoryNameCollection.cs
- RightsManagementEncryptionTransform.cs
- CompositeControl.cs