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
- HttpCapabilitiesBase.cs
- ToolStripPanelCell.cs
- Win32SafeHandles.cs
- ValidationVisibilityAttribute.cs
- Int64Storage.cs
- HitTestFilterBehavior.cs
- PrintingPermission.cs
- SqlAliaser.cs
- ServiceContractListItem.cs
- DataServiceHostFactory.cs
- PointLight.cs
- XmlChoiceIdentifierAttribute.cs
- SchemaEntity.cs
- ModelTypeConverter.cs
- OleDbDataReader.cs
- GridViewColumnHeaderAutomationPeer.cs
- DesignerRegionCollection.cs
- PerfCounters.cs
- StructuredTypeInfo.cs
- LinqDataSource.cs
- DesignerCapabilities.cs
- FlowDocumentFormatter.cs
- CookielessHelper.cs
- ActivityCodeDomSerializationManager.cs
- GeometryConverter.cs
- Console.cs
- StatusBarItem.cs
- PauseStoryboard.cs
- OverflowException.cs
- DiscoveryClientOutputChannel.cs
- XmlUtilWriter.cs
- ListControlActionList.cs
- CaretElement.cs
- ChannelServices.cs
- ButtonChrome.cs
- XamlSerializerUtil.cs
- NetworkInformationException.cs
- _ListenerResponseStream.cs
- MetadataWorkspace.cs
- WindowsListBox.cs
- CfgRule.cs
- ComplexObject.cs
- SymbolDocumentGenerator.cs
- ProtectedConfigurationSection.cs
- Base64Stream.cs
- _SafeNetHandles.cs
- RelatedEnd.cs
- MapPathBasedVirtualPathProvider.cs
- BrowserCapabilitiesCodeGenerator.cs
- DeliveryRequirementsAttribute.cs
- BStrWrapper.cs
- GlyphRun.cs
- NestPullup.cs
- XmlExtensionFunction.cs
- IRCollection.cs
- TreeViewBindingsEditorForm.cs
- QueryConverter.cs
- StringOutput.cs
- CultureData.cs
- ProxySimple.cs
- IPipelineRuntime.cs
- AssemblyGen.cs
- ClientConfigPaths.cs
- HtmlInputPassword.cs
- WindowsListViewGroup.cs
- SafeSecurityHandles.cs
- TokenBasedSetEnumerator.cs
- TdsValueSetter.cs
- WmlTextViewAdapter.cs
- Misc.cs
- RootProfilePropertySettingsCollection.cs
- IndexedString.cs
- SynchronizationLockException.cs
- ExtendedPropertyInfo.cs
- NetTcpSecurityElement.cs
- ClusterSafeNativeMethods.cs
- Int32RectValueSerializer.cs
- hresults.cs
- XmlSchemas.cs
- XmlHierarchyData.cs
- CrossAppDomainChannel.cs
- BitmapEffectDrawingContextState.cs
- ApplicationGesture.cs
- SelectionEditor.cs
- ControlParameter.cs
- CorrelationValidator.cs
- EventProxy.cs
- LocalBuilder.cs
- OpCopier.cs
- CacheMemory.cs
- Cursors.cs
- ChtmlImageAdapter.cs
- PathSegment.cs
- MarshalByValueComponent.cs
- Process.cs
- WindowsGraphics.cs
- ListBoxChrome.cs
- SqlCommand.cs
- RowUpdatingEventArgs.cs
- ReceiveSecurityHeader.cs