Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / ndp / fx / src / DataWebControls / System / Data / WebControls / EntityDataSourceViewSchema.cs / 2 / EntityDataSourceViewSchema.cs
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Entity;
using System.Data.Metadata.Edm;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Reflection;
namespace System.Web.UI.WebControls
{
internal class EntityDataSourceViewSchema : DataTable
{
internal EntityDataSourceViewSchema(EntityDataSourceWrapperCollection wrappers)
{
DataColumn column;
List keys = new List();
PropertyDescriptorCollection properties = wrappers.GetItemProperties(null);
MetadataWorkspace workspace = wrappers.Context.MetadataWorkspace;
foreach (EntityDataSourceWrapperPropertyDescriptor property in properties)
{
Type propertyType = property.PropertyType;
column = ConstructColumn(property);
column.AllowDBNull = property.Column.IsNullable;
EntityDataSourcePropertyColumn propertyColumn = property.Column as EntityDataSourcePropertyColumn;
if (null!= propertyColumn && propertyColumn.IsKey)
{
keys.Add(column);
}
Columns.Add(column);
}
this.PrimaryKey = keys.ToArray();
}
internal EntityDataSourceViewSchema(ITypedList typedList)
{
PropertyDescriptorCollection properties = typedList.GetItemProperties(null);
CreateColumnsFromPropDescs(properties);
}
internal EntityDataSourceViewSchema(IEnumerable results)
{
Type type = GetListItemType(results.GetType());
PropertyInfo[] infos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(type);
CreateColumnsFromPropDescs(properties);
}
private void CreateColumnsFromPropDescs(PropertyDescriptorCollection properties)
{
foreach (PropertyDescriptor property in properties)
{
System.ComponentModel.BrowsableAttribute attr =
(System.ComponentModel.BrowsableAttribute)property.Attributes[typeof(System.ComponentModel.BrowsableAttribute)];
if (attr.Browsable)
{
DataColumn column = ConstructColumn(property);
this.Columns.Add(column);
}
}
}
private static DataColumn ConstructColumn(PropertyDescriptor property)
{
DataColumn column = new DataColumn();
column.ColumnName = property.Name;
Type propertyType = property.PropertyType;
if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
Type[] typeArguments = propertyType.GetGenericArguments();
Debug.Assert(typeArguments.Length == 1, "should only have one type argument from Nullable<> condition.");
column.DataType = typeArguments[0];
column.AllowDBNull = true;
}
else
{
column.DataType = propertyType;
column.AllowDBNull = !propertyType.IsValueType;
}
column.ReadOnly = property.IsReadOnly;
column.Unique = false;
column.AutoIncrement = false;
column.MaxLength = -1;
return column;
}
// see System.Data.Objects.DataRecordObjectView.cs
private static PropertyInfo GetTypedIndexer(Type type)
{
PropertyInfo indexer = null;
if (typeof(IList).IsAssignableFrom(type) ||
typeof(ITypedList).IsAssignableFrom(type) ||
typeof(IListSource).IsAssignableFrom(type))
{
System.Reflection.PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
for (int idx = 0; idx < props.Length; idx++)
{
if (props[idx].GetIndexParameters().Length > 0 && props[idx].PropertyType != typeof(object))
{
indexer = props[idx];
//Prefer the standard indexer, if there is one
if (indexer.Name == "Item")
{
break;
}
}
}
}
return indexer;
}
// see System.Data.Objects.DataRecordObjectView.cs
private static Type GetListItemType(Type type)
{
Type itemType;
if (typeof(Array).IsAssignableFrom(type))
{
itemType = type.GetElementType();
}
else
{
PropertyInfo typedIndexer = GetTypedIndexer(type);
if (typedIndexer != null)
{
itemType = typedIndexer.PropertyType;
}
else
{
itemType = type;
}
}
return itemType;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// @owner [....]
// @backupOwner [....]
//---------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Entity;
using System.Data.Metadata.Edm;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Reflection;
namespace System.Web.UI.WebControls
{
internal class EntityDataSourceViewSchema : DataTable
{
internal EntityDataSourceViewSchema(EntityDataSourceWrapperCollection wrappers)
{
DataColumn column;
List keys = new List();
PropertyDescriptorCollection properties = wrappers.GetItemProperties(null);
MetadataWorkspace workspace = wrappers.Context.MetadataWorkspace;
foreach (EntityDataSourceWrapperPropertyDescriptor property in properties)
{
Type propertyType = property.PropertyType;
column = ConstructColumn(property);
column.AllowDBNull = property.Column.IsNullable;
EntityDataSourcePropertyColumn propertyColumn = property.Column as EntityDataSourcePropertyColumn;
if (null!= propertyColumn && propertyColumn.IsKey)
{
keys.Add(column);
}
Columns.Add(column);
}
this.PrimaryKey = keys.ToArray();
}
internal EntityDataSourceViewSchema(ITypedList typedList)
{
PropertyDescriptorCollection properties = typedList.GetItemProperties(null);
CreateColumnsFromPropDescs(properties);
}
internal EntityDataSourceViewSchema(IEnumerable results)
{
Type type = GetListItemType(results.GetType());
PropertyInfo[] infos = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(type);
CreateColumnsFromPropDescs(properties);
}
private void CreateColumnsFromPropDescs(PropertyDescriptorCollection properties)
{
foreach (PropertyDescriptor property in properties)
{
System.ComponentModel.BrowsableAttribute attr =
(System.ComponentModel.BrowsableAttribute)property.Attributes[typeof(System.ComponentModel.BrowsableAttribute)];
if (attr.Browsable)
{
DataColumn column = ConstructColumn(property);
this.Columns.Add(column);
}
}
}
private static DataColumn ConstructColumn(PropertyDescriptor property)
{
DataColumn column = new DataColumn();
column.ColumnName = property.Name;
Type propertyType = property.PropertyType;
if (propertyType.IsGenericType && propertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
Type[] typeArguments = propertyType.GetGenericArguments();
Debug.Assert(typeArguments.Length == 1, "should only have one type argument from Nullable<> condition.");
column.DataType = typeArguments[0];
column.AllowDBNull = true;
}
else
{
column.DataType = propertyType;
column.AllowDBNull = !propertyType.IsValueType;
}
column.ReadOnly = property.IsReadOnly;
column.Unique = false;
column.AutoIncrement = false;
column.MaxLength = -1;
return column;
}
// see System.Data.Objects.DataRecordObjectView.cs
private static PropertyInfo GetTypedIndexer(Type type)
{
PropertyInfo indexer = null;
if (typeof(IList).IsAssignableFrom(type) ||
typeof(ITypedList).IsAssignableFrom(type) ||
typeof(IListSource).IsAssignableFrom(type))
{
System.Reflection.PropertyInfo[] props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
for (int idx = 0; idx < props.Length; idx++)
{
if (props[idx].GetIndexParameters().Length > 0 && props[idx].PropertyType != typeof(object))
{
indexer = props[idx];
//Prefer the standard indexer, if there is one
if (indexer.Name == "Item")
{
break;
}
}
}
}
return indexer;
}
// see System.Data.Objects.DataRecordObjectView.cs
private static Type GetListItemType(Type type)
{
Type itemType;
if (typeof(Array).IsAssignableFrom(type))
{
itemType = type.GetElementType();
}
else
{
PropertyInfo typedIndexer = GetTypedIndexer(type);
if (typedIndexer != null)
{
itemType = typedIndexer.PropertyType;
}
else
{
itemType = type;
}
}
return itemType;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SecureUICommand.cs
- ResourceExpression.cs
- CompressedStack.cs
- ToolStripControlHost.cs
- SignatureToken.cs
- StylusPlugin.cs
- GlobalizationAssembly.cs
- ToolStripOverflow.cs
- CompressionTransform.cs
- ReaderOutput.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- ViewManager.cs
- compensatingcollection.cs
- PackageDigitalSignature.cs
- ExitEventArgs.cs
- Encoding.cs
- DoubleLinkListEnumerator.cs
- GroupBoxAutomationPeer.cs
- DataGridViewRowStateChangedEventArgs.cs
- AttributeUsageAttribute.cs
- ScrollProviderWrapper.cs
- Padding.cs
- _Semaphore.cs
- Clipboard.cs
- PlainXmlDeserializer.cs
- FlowDocument.cs
- DataGridViewRowsRemovedEventArgs.cs
- RectValueSerializer.cs
- ByteFacetDescriptionElement.cs
- GridViewItemAutomationPeer.cs
- SafeProcessHandle.cs
- LookupBindingPropertiesAttribute.cs
- HandlerFactoryCache.cs
- CommandPlan.cs
- SystemUnicastIPAddressInformation.cs
- DataGridViewHeaderCell.cs
- TextEffectResolver.cs
- BlockCollection.cs
- ColumnPropertiesGroup.cs
- FileSystemEventArgs.cs
- TreePrinter.cs
- ResetableIterator.cs
- OleDbRowUpdatingEvent.cs
- TextTreeInsertElementUndoUnit.cs
- ZipPackage.cs
- ConnectionPoint.cs
- BoundsDrawingContextWalker.cs
- UnknownWrapper.cs
- StructuralObject.cs
- login.cs
- Operand.cs
- XNameTypeConverter.cs
- MediaElementAutomationPeer.cs
- ALinqExpressionVisitor.cs
- Highlights.cs
- ArrayConverter.cs
- IteratorFilter.cs
- NumberSubstitution.cs
- NumberFunctions.cs
- TouchDevice.cs
- EnumDataContract.cs
- HashStream.cs
- RemoveStoryboard.cs
- Rfc2898DeriveBytes.cs
- XmlSchemaComplexType.cs
- ThreadStartException.cs
- DocumentPageView.cs
- SqlCommandSet.cs
- TypedDataSetSchemaImporterExtension.cs
- XmlJsonWriter.cs
- AssemblyHash.cs
- NumericUpDownAccelerationCollection.cs
- ScrollViewerAutomationPeer.cs
- UIInitializationException.cs
- AnimatedTypeHelpers.cs
- TextAnchor.cs
- PanelContainerDesigner.cs
- HtmlValidationSummaryAdapter.cs
- MarginsConverter.cs
- ImageAnimator.cs
- DefaultValueMapping.cs
- StringBuilder.cs
- GenericIdentity.cs
- UnknownBitmapDecoder.cs
- TreeNodeCollection.cs
- SkewTransform.cs
- DictionaryEditChange.cs
- Point.cs
- XPathEmptyIterator.cs
- SimpleType.cs
- MenuAdapter.cs
- SecurityPolicySection.cs
- Expr.cs
- OneWayBindingElementImporter.cs
- _LocalDataStore.cs
- ValueProviderWrapper.cs
- TextTabProperties.cs
- hebrewshape.cs
- MissingMethodException.cs
- CodeParameterDeclarationExpressionCollection.cs