Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / System / data / design / TypedColumnHandler.cs / 2 / TypedColumnHandler.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All Rights Reserved. // Information Contained Herein is Proprietary and Confidential. // //----------------------------------------------------------------------------- namespace System.Data.Design { using System; using System.CodeDom; using System.Collections; using System.ComponentModel; using System.Data; using System.Design; using System.Reflection; internal sealed class TypedColumnHandler { private TypedDataSourceCodeGenerator codeGenerator = null; private DataTable table = null; private DesignTable designTable = null; private DesignColumnCollection columns = null; internal TypedColumnHandler(DesignTable designTable, TypedDataSourceCodeGenerator codeGenerator) { this.codeGenerator = codeGenerator; this.table = designTable.DataTable; this.designTable = designTable; this.columns = designTable.DesignColumns; } internal void AddPrivateVariables(CodeTypeDeclaration dataTableClass) { if(dataTableClass == null) { throw new InternalException("Table CodeTypeDeclaration should not be null."); } if( columns == null ) { return; } foreach(DesignColumn column in columns) { //\\ private DataColumn; dataTableClass.Members.Add(CodeGenHelper.FieldDecl(CodeGenHelper.GlobalType(typeof(System.Data.DataColumn)), column.GeneratorColumnVarNameInTable)); } } internal void AddTableColumnProperties(CodeTypeDeclaration dataTableClass) { if( columns == null ) { return; } foreach(DesignColumn column in columns) { //\\ public DataColumn { //\\ get { return this. ; } //\\ } CodeMemberProperty colProp = CodeGenHelper.PropertyDecl( CodeGenHelper.GlobalType(typeof(System.Data.DataColumn)), column.GeneratorColumnPropNameInTable, MemberAttributes.Public | MemberAttributes.Final ); colProp.GetStatements.Add( CodeGenHelper.Return( CodeGenHelper.Field(CodeGenHelper.This(), column.GeneratorColumnVarNameInTable) ) ); dataTableClass.Members.Add(colProp); } } internal void AddRowColumnProperties(CodeTypeDeclaration rowClass) { bool storageInitialized = false; string rowClassName = codeGenerator.TableHandler.Tables[table.TableName].GeneratorRowClassName; string tableFieldName = codeGenerator.TableHandler.Tables[table.TableName].GeneratorTableVarName; foreach(DesignColumn designColumn in columns) { DataColumn column = designColumn.DataColumn; Type dataType = column.DataType; string rowColumnName = designColumn.GeneratorColumnPropNameInRow; string tableColumnName = designColumn.GeneratorColumnPropNameInTable; GenericNameHandler propertyScopeNameHandler = new GenericNameHandler(new string[] { rowColumnName }, codeGenerator.CodeProvider); //\\ public { //\\ get { //\\ try{ //\\ return (( )(this[this.table . Column])); //\\ }catch(InvalidCastException e) { //\\ throw new StrongTypingException("StrongTyping_CananotAccessDBNull", e); //\\ } //\\ } //\\or //\\ get { //\\ if(Is Null()){ //\\ return ( ); //\\ }else { //\\ return (( )(this[this.table . Column])); //\\ } //\\ } //\\or //\\ get { //\\ if(Is Null()){ //\\ return _nullValue; //\\ }else { //\\ return (( )(this[this.table . Column])); //\\ } //\\ } //\\ //\\ set {this[this.table . Column] = value;} //\\ } //\\ //\\if required: //\\ private static _nullValue = ...; CodeMemberProperty rowProp = CodeGenHelper.PropertyDecl( CodeGenHelper.Type(dataType), rowColumnName, MemberAttributes.Public | MemberAttributes.Final ); CodeStatement getStmnt = CodeGenHelper.Return( CodeGenHelper.Cast( CodeGenHelper.GlobalType(dataType), CodeGenHelper.Indexer( CodeGenHelper.This(), CodeGenHelper.Property( CodeGenHelper.Field(CodeGenHelper.This(), tableFieldName), tableColumnName ) ) ) ); if(column.AllowDBNull) { string nullValue = (string) column.ExtendedProperties["nullValue"]; if(nullValue == null || nullValue == "_throw") { getStmnt = CodeGenHelper.Try( getStmnt, CodeGenHelper.Catch( CodeGenHelper.GlobalType(typeof(System.InvalidCastException)), propertyScopeNameHandler.AddNameToList("e"), CodeGenHelper.Throw( CodeGenHelper.GlobalType(typeof(System.Data.StrongTypingException)), SR.GetString(SR.CG_ColumnIsDBNull, column.ColumnName, table.TableName), propertyScopeNameHandler.GetNameFromList("e") ) ) ); }else { CodeExpression nullValueFieldInit = null; // in some cases we generate it CodeExpression nullValueExpr; if(nullValue == "_null") { if(column.DataType.IsSubclassOf(typeof(System.ValueType))) { codeGenerator.ProblemList.Add( new DSGeneratorProblem(SR.GetString(SR.CG_TypeCantBeNull, column.ColumnName, column.DataType.Name), ProblemSeverity.NonFatalError, designColumn) ); continue; // with next column. } nullValueExpr = CodeGenHelper.Primitive(null); } else if (nullValue == "_empty") { if (column.DataType == typeof(string)) { nullValueExpr = CodeGenHelper.Property(CodeGenHelper.TypeExpr(CodeGenHelper.GlobalType(column.DataType)), "Empty"); } else { nullValueExpr = CodeGenHelper.Field( CodeGenHelper.TypeExpr(CodeGenHelper.Type(rowClassName)), rowColumnName + "_nullValue" ); //\\ private static _nullValue = new (); /* check that object can be constructed with parameterless constructor */ ConstructorInfo constructor = column.DataType.GetConstructor(new Type[] { typeof(string) }); if (constructor == null) { codeGenerator.ProblemList.Add(new DSGeneratorProblem(SR.GetString(SR.CG_NoCtor0, column.ColumnName, column.DataType.Name), ProblemSeverity.NonFatalError, designColumn)); continue; // with next column. } constructor.Invoke(new Object[] { }); // can throw here. nullValueFieldInit = CodeGenHelper.New(CodeGenHelper.Type(column.DataType), new CodeExpression[] { }); } } else { if (!storageInitialized) { table.NewRow(); // by this we force DataTable create DataStorage for each column in a table. storageInitialized = true; } object nullValueObj = codeGenerator.RowHandler.RowGenerator.ConvertXmlToObject.Invoke(column, new object[] { nullValue }); // an exception will be thrown if nullValue can't be conwerted to col.DataType DSGeneratorProblem problem = CodeGenHelper.GenerateValueExprAndFieldInit(designColumn, nullValueObj, nullValue, rowClassName, rowColumnName + "_nullValue", out nullValueExpr, out nullValueFieldInit); if (problem != null) { codeGenerator.ProblemList.Add(problem); continue; // with next column } } getStmnt = CodeGenHelper.If( CodeGenHelper.MethodCall(CodeGenHelper.This(), "Is" + rowColumnName + "Null"), new CodeStatement[] {CodeGenHelper.Return(nullValueExpr)}, new CodeStatement[] {getStmnt} ); if(nullValueFieldInit != null) { CodeMemberField nullValueField = CodeGenHelper.FieldDecl( CodeGenHelper.Type(column.DataType.FullName), rowColumnName + "_nullValue" ); nullValueField.Attributes = MemberAttributes.Static | MemberAttributes.Private; nullValueField.InitExpression = nullValueFieldInit; rowClass.Members.Add(nullValueField); } } } rowProp.GetStatements.Add(getStmnt); rowProp.SetStatements.Add( CodeGenHelper.Assign( CodeGenHelper.Indexer( CodeGenHelper.This(), CodeGenHelper.Property( CodeGenHelper.Field(CodeGenHelper.This(), tableFieldName), tableColumnName ) ), CodeGenHelper.Value() ) ); rowClass.Members.Add(rowProp); if (column.AllowDBNull) { //\\ public bool Is Null() { //\\ return this.IsNull(this.table . Column); //\\ } string candidateName = "Is" + rowColumnName + "Null"; string validatedName = MemberNameValidator.GenerateIdName(candidateName, this.codeGenerator.CodeProvider, false /*useSuffix*/); CodeMemberMethod isNull = CodeGenHelper.MethodDecl( CodeGenHelper.GlobalType(typeof(System.Boolean)), validatedName, MemberAttributes.Public | MemberAttributes.Final ); isNull.Statements.Add( CodeGenHelper.Return( CodeGenHelper.MethodCall( CodeGenHelper.This(), "IsNull", CodeGenHelper.Property( CodeGenHelper.Field(CodeGenHelper.This(), tableFieldName), tableColumnName ) ) ) ); rowClass.Members.Add(isNull); //\\ public void Set Null() { //\\ this[this.table . Column] = DBNull.Value; //\\ } candidateName = "Set" + rowColumnName + "Null"; validatedName = MemberNameValidator.GenerateIdName(candidateName, this.codeGenerator.CodeProvider, false /*useSuffix*/); CodeMemberMethod setNull = CodeGenHelper.MethodDecl( CodeGenHelper.GlobalType(typeof(void)), validatedName, MemberAttributes.Public | MemberAttributes.Final ); setNull.Statements.Add( CodeGenHelper.Assign( CodeGenHelper.Indexer( CodeGenHelper.This(), CodeGenHelper.Property( CodeGenHelper.Field(CodeGenHelper.This(), tableFieldName), tableColumnName ) ), CodeGenHelper.Field(CodeGenHelper.GlobalTypeExpr(typeof(Convert)), "DBNull") ) ); rowClass.Members.Add(setNull); } } } internal void AddRowGetRelatedRowsMethods(CodeTypeDeclaration rowClass) { DataRelationCollection childRelations = table.ChildRelations; for (int i = 0; i < childRelations.Count; i++) { //\\ public [] Get Rows() { //\\ return ( []) base.GetChildRows(this.Table.ChildRelations[" "]); //\\ } DataRelation relation = childRelations[i]; string rowConcreteClassName = codeGenerator.TableHandler.Tables[relation.ChildTable.TableName].GeneratorRowClassName; CodeMemberMethod childArray = CodeGenHelper.MethodDecl( CodeGenHelper.Type(rowConcreteClassName, 1), codeGenerator.RelationHandler.Relations[relation.RelationName].GeneratorChildPropName, MemberAttributes.Public | MemberAttributes.Final ); childArray.Statements.Add( CodeGenHelper.If( CodeGenHelper.IdEQ( CodeGenHelper.Indexer( CodeGenHelper.Property( CodeGenHelper.Property(CodeGenHelper.This(), "Table"), "ChildRelations" ), CodeGenHelper.Str(relation.RelationName) ), CodeGenHelper.Primitive(null) ), CodeGenHelper.Return( new CodeArrayCreateExpression(rowConcreteClassName, 0) ), CodeGenHelper.Return( CodeGenHelper.Cast( CodeGenHelper.Type(rowConcreteClassName, 1), CodeGenHelper.MethodCall( CodeGenHelper.Base(), "GetChildRows", CodeGenHelper.Indexer( CodeGenHelper.Property( CodeGenHelper.Property(CodeGenHelper.This(), "Table"), "ChildRelations" ), CodeGenHelper.Str(relation.RelationName) ) ) ) ) ) ); rowClass.Members.Add(childArray); } DataRelationCollection parentRelations = table.ParentRelations; for (int i = 0; i < parentRelations.Count; i++) { //\\ public Parent { //\\ get { //\\ return (( )(this.GetParentRow(this.Table.ParentRelations[" "]))); //\\ } //\\ set { //\\ this.SetParentRow(value, this.Table.ParentRelations[" "]); //\\ } //\\ } DataRelation relation = parentRelations[i]; string parentTypedRowName = codeGenerator.TableHandler.Tables[relation.ParentTable.TableName].GeneratorRowClassName; CodeMemberProperty parentTableProp = CodeGenHelper.PropertyDecl( CodeGenHelper.Type(parentTypedRowName), codeGenerator.RelationHandler.Relations[relation.RelationName].GeneratorParentPropName, MemberAttributes.Public | MemberAttributes.Final ); parentTableProp.GetStatements.Add( CodeGenHelper.Return( CodeGenHelper.Cast( CodeGenHelper.Type(parentTypedRowName), CodeGenHelper.MethodCall( CodeGenHelper.This(), "GetParentRow", CodeGenHelper.Indexer( CodeGenHelper.Property( CodeGenHelper.Property(CodeGenHelper.This(), "Table"), "ParentRelations" ), CodeGenHelper.Str(relation.RelationName) ) ) ) ) ); parentTableProp.SetStatements.Add( CodeGenHelper.MethodCall( CodeGenHelper.This(), "SetParentRow", new CodeExpression[] { CodeGenHelper.Value(), CodeGenHelper.Indexer( CodeGenHelper.Property( CodeGenHelper.Property(CodeGenHelper.This(), "Table"), "ParentRelations" ), CodeGenHelper.Str(relation.RelationName) ) } ) ); rowClass.Members.Add(parentTableProp); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- ListSortDescriptionCollection.cs
- UndoUnit.cs
- _NetRes.cs
- MobileUserControl.cs
- TableParaClient.cs
- InputScope.cs
- UriParserTemplates.cs
- UpdateTracker.cs
- SqlResolver.cs
- UInt16Storage.cs
- LogicalExpr.cs
- SiteMapNodeItem.cs
- WebPartsSection.cs
- PublisherIdentityPermission.cs
- precedingsibling.cs
- DirtyTextRange.cs
- SourceElementsCollection.cs
- _RequestCacheProtocol.cs
- FormViewDeleteEventArgs.cs
- SafeRegistryHandle.cs
- EmbeddedMailObject.cs
- XsltFunctions.cs
- WebPartRestoreVerb.cs
- XmlAutoDetectWriter.cs
- DataGridTablesFactory.cs
- StateMachineWorkflowDesigner.cs
- ProcessProtocolHandler.cs
- ReturnValue.cs
- UnsafeNativeMethods.cs
- EDesignUtil.cs
- nulltextnavigator.cs
- COM2TypeInfoProcessor.cs
- PriorityBinding.cs
- ToolStripPanelRow.cs
- BitmapEffectCollection.cs
- basenumberconverter.cs
- XmlSchemaAttributeGroupRef.cs
- AppModelKnownContentFactory.cs
- EdmComplexTypeAttribute.cs
- ScriptIgnoreAttribute.cs
- Line.cs
- BookmarkScope.cs
- MembershipSection.cs
- COM2ComponentEditor.cs
- OrderPreservingSpoolingTask.cs
- ApplicationId.cs
- EntityClassGenerator.cs
- XslVisitor.cs
- MTConfigUtil.cs
- AppDomainProtocolHandler.cs
- SystemInfo.cs
- BackoffTimeoutHelper.cs
- Compress.cs
- BitmapEffectGeneralTransform.cs
- ISFClipboardData.cs
- CaseInsensitiveOrdinalStringComparer.cs
- PreloadedPackages.cs
- HttpServerUtilityWrapper.cs
- Comparer.cs
- BooleanFunctions.cs
- DocumentApplication.cs
- DependencyPropertyValueSerializer.cs
- ProgressBar.cs
- ClientUIRequest.cs
- QueryServiceConfigHandle.cs
- XsltLoader.cs
- X500Name.cs
- XsltArgumentList.cs
- TreeNodeEventArgs.cs
- FlowDocumentReader.cs
- AndAlso.cs
- TdsParser.cs
- RectangleGeometry.cs
- EncoderParameter.cs
- XPathCompileException.cs
- PropertySet.cs
- PasswordRecovery.cs
- TemplatedControlDesigner.cs
- ShutDownListener.cs
- IssuanceLicense.cs
- CryptoProvider.cs
- _WebProxyDataBuilder.cs
- ButtonStandardAdapter.cs
- TextEffect.cs
- DateTimeOffsetAdapter.cs
- StructuredTypeEmitter.cs
- ContainerAction.cs
- PersonalizationProvider.cs
- SqlBuilder.cs
- CompareValidator.cs
- COM2TypeInfoProcessor.cs
- ProcessThread.cs
- VisualStyleTypesAndProperties.cs
- InvalidComObjectException.cs
- PenContext.cs
- Coordinator.cs
- NodeFunctions.cs
- QilList.cs
- NotFiniteNumberException.cs