Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WebForms / System / Web / UI / Design / DesignTimeData.cs / 1 / DesignTimeData.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.Design { using System; using System.Design; using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using Microsoft.Win32; using System.Data; using System.Diagnostics; using System.Globalization; using System.Reflection; using System.Web.UI; ////// /// Helpers used by control designers to generate sample data /// for use in design time databinding. /// [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)] public sealed class DesignTimeData { ////// public static readonly EventHandler DataBindingHandler = new EventHandler(GlobalDataBindingHandler.OnDataBind); /// /// /// private DesignTimeData() { } ////// /// Creates a dummy datatable. /// public static DataTable CreateDummyDataTable() { DataTable dummyDataTable = new DataTable(); dummyDataTable.Locale = CultureInfo.InvariantCulture; DataColumnCollection columns = dummyDataTable.Columns; columns.Add(SR.GetString(SR.Sample_Column, 0), typeof(string)); columns.Add(SR.GetString(SR.Sample_Column, 1), typeof(string)); columns.Add(SR.GetString(SR.Sample_Column, 2), typeof(string)); return dummyDataTable; } ////// Creates a dummy datatable that indicates that the databound control is connected to a datasource. /// public static DataTable CreateDummyDataBoundDataTable() { DataTable dummyDataTable = new DataTable(); dummyDataTable.Locale = CultureInfo.InvariantCulture; DataColumnCollection columns = dummyDataTable.Columns; columns.Add(SR.GetString(SR.Sample_Databound_Column, 0), typeof(string)); columns.Add(SR.GetString(SR.Sample_Databound_Column, 1), typeof(int)); columns.Add(SR.GetString(SR.Sample_Databound_Column, 2), typeof(string)); return dummyDataTable; } ////// /// Creates a sample datatable with same schema as the supplied datasource. /// public static DataTable CreateSampleDataTable(IEnumerable referenceData) { return CreateSampleDataTableInternal(referenceData, false); } public static DataTable CreateSampleDataTable(IEnumerable referenceData, bool useDataBoundData) { return CreateSampleDataTableInternal(referenceData, useDataBoundData); } private static DataTable CreateSampleDataTableInternal(IEnumerable referenceData, bool useDataBoundData) { DataTable sampleDataTable = new DataTable(); sampleDataTable.Locale = CultureInfo.InvariantCulture; DataColumnCollection columns = sampleDataTable.Columns; PropertyDescriptorCollection props = GetDataFields(referenceData); if (props != null) { foreach (PropertyDescriptor propDesc in props) { Type propType = propDesc.PropertyType; if ((propType.IsPrimitive == false) && (propType != typeof(DateTime)) && (propType != typeof(Decimal))) { // we can't handle any remaining or custom types, so // we'll have to create a column of type string in the // design time table. // propType = typeof(string); } columns.Add(propDesc.Name, propType); } } if (columns.Count != 0) { return sampleDataTable; } else { if (useDataBoundData) { return CreateDummyDataBoundDataTable(); } return CreateDummyDataTable(); } } ////// /// public static PropertyDescriptorCollection GetDataFields(IEnumerable dataSource) { if (dataSource is ITypedList) { return ((ITypedList)dataSource).GetItemProperties(new PropertyDescriptor[0]); } Type dataSourceType = dataSource.GetType(); PropertyInfo itemProp = dataSourceType.GetProperty("Item", BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static, null, null, new Type[] { typeof(int) }, null); if ((itemProp != null) && (itemProp.PropertyType != typeof(object))) { return TypeDescriptor.GetProperties(itemProp.PropertyType); } return null; } ////// /// public static string[] GetDataMembers(object dataSource) { IListSource listSource = dataSource as IListSource; if ((listSource != null) && listSource.ContainsListCollection) { IList memberList = ((IListSource)dataSource).GetList(); Debug.Assert(memberList != null, "Got back null from IListSource"); ITypedList typedList = memberList as ITypedList; if (typedList != null) { PropertyDescriptorCollection props = typedList.GetItemProperties(new PropertyDescriptor[0]); if (props != null) { ArrayList members = new ArrayList(props.Count); foreach (PropertyDescriptor pd in props) { members.Add(pd.Name); } return (string[])members.ToArray(typeof(string)); } } } return null; } ////// /// public static IEnumerable GetDataMember(IListSource dataSource, string dataMember) { IEnumerable list = null; IList memberList = dataSource.GetList(); if ((memberList != null) && (memberList is ITypedList)) { if (dataSource.ContainsListCollection == false) { Debug.Assert((dataMember == null) || (dataMember.Length == 0), "List does not contain data members"); if ((dataMember != null) && (dataMember.Length != 0)) { throw new ArgumentException(SR.GetString(SR.DesignTimeData_BadDataMember)); } list = (IEnumerable)memberList; } else { ITypedList typedMemberList = (ITypedList)memberList; PropertyDescriptorCollection propDescs = typedMemberList.GetItemProperties(new PropertyDescriptor[0]); if ((propDescs != null) && (propDescs.Count != 0)) { PropertyDescriptor listProperty = null; if ((dataMember == null) || (dataMember.Length == 0)) { listProperty = propDescs[0]; } else { listProperty = propDescs.Find(dataMember, true); } if (listProperty != null) { object listRow = memberList[0]; object listObject = listProperty.GetValue(listRow); if ((listObject != null) && (listObject is IEnumerable)) { list = (IEnumerable)listObject; } } } } } return list; } ////// /// Adds sample rows into the specified datatable, and returns a cursor on top of it. /// public static IEnumerable GetDesignTimeDataSource(DataTable dataTable, int minimumRows) { DataView dv = null; int rowCount = dataTable.Rows.Count; if (rowCount < minimumRows) { int rowsToAdd = minimumRows - rowCount; DataRowCollection rows = dataTable.Rows; DataColumnCollection columns = dataTable.Columns; int columnCount = columns.Count; DataRow[] rowsArray = new DataRow[rowsToAdd]; // add the sample rows for (int i = 0; i < rowsToAdd; i++) { DataRow row = dataTable.NewRow(); int rowIndex = rowCount + i; for (int c = 0; c < columnCount; c++) { Type dataType = columns[c].DataType; Object obj = null; if (dataType == typeof(String)) { obj = SR.GetString(SR.Sample_Databound_Text_Alt); } else if ((dataType == typeof(Int32)) || (dataType == typeof(Int16)) || (dataType == typeof(Int64)) || (dataType == typeof(UInt32)) || (dataType == typeof(UInt16)) || (dataType == typeof(UInt64))) { obj = rowIndex; } else if ((dataType == typeof(Byte)) || (dataType == typeof(SByte))) { obj = (rowIndex % 2) != 0 ? 1 : 0; } else if (dataType == typeof(Boolean)) { obj = (rowIndex % 2) != 0 ? true : false; } else if (dataType == typeof(DateTime)) { obj = DateTime.Today; } else if ((dataType == typeof(Double)) || (dataType == typeof(Single)) || (dataType == typeof(Decimal))) { obj = i / 10.0; } else if (dataType == typeof(Char)) { obj = 'x'; } else { Debug.Assert(false, "Unexpected type of column in design time datatable."); obj = System.DBNull.Value; } row[c] = obj; } rows.Add(row); } } // create a DataView on top of the effective design time datasource dv = new DataView(dataTable); return dv; } ////// /// public static object GetSelectedDataSource(IComponent component, string dataSource) { object selectedDataSource = null; ISite componentSite = component.Site; if (componentSite != null) { IContainer container = (IContainer)componentSite.GetService(typeof(IContainer)); if (container != null) { IComponent comp = container.Components[dataSource]; if ((comp is IEnumerable) || (comp is IListSource)) { selectedDataSource = comp; } } } return selectedDataSource; } ////// /// public static IEnumerable GetSelectedDataSource(IComponent component, string dataSource, string dataMember) { IEnumerable selectedDataSource = null; object selectedDataSourceObject = DesignTimeData.GetSelectedDataSource(component, dataSource); if (selectedDataSourceObject != null) { IListSource listSource = selectedDataSourceObject as IListSource; if (listSource != null) { if (listSource.ContainsListCollection == false) { // the returned list is itself the list we want to bind to selectedDataSource = (IEnumerable)listSource.GetList(); } else { selectedDataSource = GetDataMember(listSource, dataMember); } } else { Debug.Assert(selectedDataSourceObject is IEnumerable); selectedDataSource = (IEnumerable)selectedDataSourceObject; } } return selectedDataSource; } } } // 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
- GridView.cs
- MaterialGroup.cs
- BitmapEffect.cs
- SqlFileStream.cs
- PersonalizationStateInfo.cs
- Selection.cs
- UIServiceHelper.cs
- ProfileModule.cs
- PolyBezierSegment.cs
- PrimarySelectionAdorner.cs
- InputReferenceExpression.cs
- KeyboardDevice.cs
- DispatchOperation.cs
- SingleAnimation.cs
- DeviceSpecificDesigner.cs
- StretchValidation.cs
- CmsInterop.cs
- HostingEnvironment.cs
- TextSelection.cs
- TextUtf8RawTextWriter.cs
- ExceptionValidationRule.cs
- SaveFileDialog.cs
- CodeDOMUtility.cs
- CodeTypeParameterCollection.cs
- GeometryDrawing.cs
- ConfigXmlSignificantWhitespace.cs
- _AutoWebProxyScriptWrapper.cs
- NullReferenceException.cs
- DodSequenceMerge.cs
- ToolStripMenuItem.cs
- RadioButton.cs
- StorageComplexPropertyMapping.cs
- LinkDescriptor.cs
- MethodRental.cs
- ConfigXmlComment.cs
- SimpleLine.cs
- XmlDictionaryWriter.cs
- StaticSiteMapProvider.cs
- EdmMember.cs
- PeerReferralPolicy.cs
- ExpandCollapsePattern.cs
- diagnosticsswitches.cs
- UTF8Encoding.cs
- XPathScanner.cs
- PageVisual.cs
- SqlCacheDependencyDatabaseCollection.cs
- ParentQuery.cs
- EventlogProvider.cs
- httpserverutility.cs
- SByteStorage.cs
- TreeNodeCollection.cs
- TransformProviderWrapper.cs
- Application.cs
- ListParaClient.cs
- ChannelToken.cs
- RequestQueryParser.cs
- NavigationEventArgs.cs
- RelationshipDetailsRow.cs
- WebServiceResponse.cs
- HostedHttpTransportManager.cs
- SqlIdentifier.cs
- GCHandleCookieTable.cs
- GeneralTransform2DTo3D.cs
- CustomCategoryAttribute.cs
- KeyedHashAlgorithm.cs
- User.cs
- UnhandledExceptionEventArgs.cs
- MD5Cng.cs
- PersonalizationProviderHelper.cs
- FixedSOMImage.cs
- RootBrowserWindowAutomationPeer.cs
- XPathNodeInfoAtom.cs
- HeaderUtility.cs
- GlobalEventManager.cs
- smtppermission.cs
- SqlRemoveConstantOrderBy.cs
- CompensationTokenData.cs
- GraphicsContext.cs
- EntityDataSourceQueryBuilder.cs
- UIElement3DAutomationPeer.cs
- ListManagerBindingsCollection.cs
- FixUpCollection.cs
- ButtonBaseDesigner.cs
- StylusCaptureWithinProperty.cs
- IxmlLineInfo.cs
- JoinCqlBlock.cs
- regiisutil.cs
- CodeSubDirectoriesCollection.cs
- StyleHelper.cs
- Int64.cs
- FunctionUpdateCommand.cs
- ChameleonKey.cs
- TypeReference.cs
- PrimarySelectionGlyph.cs
- BindingBase.cs
- DataGridItem.cs
- TextSelectionHighlightLayer.cs
- ButtonBaseDesigner.cs
- ButtonBase.cs
- ExtendedProtectionPolicy.cs