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
- DatePicker.cs
- regiisutil.cs
- XmlCharType.cs
- SelectedDatesCollection.cs
- RegistrationServices.cs
- VisualTreeHelper.cs
- WebConfigurationHost.cs
- DataSvcMapFileSerializer.cs
- PersonalizationStateInfo.cs
- XmlSchemaRedefine.cs
- PreviewPrintController.cs
- UrlParameterReader.cs
- DocumentPage.cs
- uribuilder.cs
- Vector3DIndependentAnimationStorage.cs
- RequestCacheManager.cs
- SchemaComplexType.cs
- EventListener.cs
- WindowsListViewGroupSubsetLink.cs
- BufferedWebEventProvider.cs
- Listen.cs
- BordersPage.cs
- ValidationPropertyAttribute.cs
- ExpressionBuilderCollection.cs
- FormViewInsertEventArgs.cs
- CodeTypeDeclarationCollection.cs
- SoapFaultCodes.cs
- Stream.cs
- ControlBuilderAttribute.cs
- Activator.cs
- HtmlAnchor.cs
- ConnectionManagementElement.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- ApplicationTrust.cs
- XmlAttributeOverrides.cs
- TypeInfo.cs
- VirtualPathProvider.cs
- RubberbandSelector.cs
- DrawTreeNodeEventArgs.cs
- AddValidationError.cs
- AutomationAttributeInfo.cs
- ListenerElementsCollection.cs
- TextSchema.cs
- XamlStream.cs
- DelegatingChannelListener.cs
- Table.cs
- EntityParameter.cs
- SrgsToken.cs
- UnsafeNativeMethods.cs
- DataGridViewButtonColumn.cs
- RegexTree.cs
- AnimationTimeline.cs
- SimpleWorkerRequest.cs
- TrackBarRenderer.cs
- ContentTextAutomationPeer.cs
- TypeDescriptionProviderAttribute.cs
- Model3DGroup.cs
- TableRow.cs
- WebPartDisplayModeCancelEventArgs.cs
- QuotedStringWriteStateInfo.cs
- StreamReader.cs
- WindowClosedEventArgs.cs
- PictureBox.cs
- DataRow.cs
- TraceFilter.cs
- DrawingVisual.cs
- ItemDragEvent.cs
- TdsRecordBufferSetter.cs
- HtmlControl.cs
- SerializationEventsCache.cs
- VisualStyleInformation.cs
- Enumerable.cs
- sqlmetadatafactory.cs
- Brush.cs
- XamlSerializationHelper.cs
- ZipIOExtraFieldElement.cs
- IPPacketInformation.cs
- TypefaceCollection.cs
- RemotingServices.cs
- ProcessManager.cs
- PageThemeCodeDomTreeGenerator.cs
- ContentPresenter.cs
- XmlSchema.cs
- OdbcError.cs
- OracleRowUpdatedEventArgs.cs
- HostAdapter.cs
- Zone.cs
- MediaElement.cs
- EncoderExceptionFallback.cs
- FilterElement.cs
- MdiWindowListItemConverter.cs
- IDReferencePropertyAttribute.cs
- XsltContext.cs
- CompilationLock.cs
- ImageListStreamer.cs
- LogExtent.cs
- SID.cs
- MobileUserControl.cs
- Attributes.cs
- RectKeyFrameCollection.cs