Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / Compilation / DataBindingExpressionBuilder.cs / 1 / DataBindingExpressionBuilder.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.Compilation {
using System;
using System.Security.Permissions;
using System.CodeDom;
using System.Diagnostics;
using System.Reflection;
using System.Web.UI;
internal class DataBindingExpressionBuilder : ExpressionBuilder {
private static EventInfo eventInfo;
private const string EvalMethodName = "Eval";
private const string GetDataItemMethodName = "GetDataItem";
internal static EventInfo Event {
get {
if (eventInfo == null) {
eventInfo = typeof(Control).GetEvent("DataBinding");
}
return eventInfo;
}
}
internal static void BuildEvalExpression(string field, string formatString, string propertyName,
Type propertyType, ControlBuilder controlBuilder, CodeStatementCollection methodStatements, CodeStatementCollection statements, CodeLinePragma linePragma, ref bool hasTempObject) {
// Altogether, this function will create a statement that looks like this:
// if (this.Page.GetDataItem() != null) {
// target.{{propName}} = ({{propType}}) this.Eval(fieldName, formatString);
// }
// this.Eval(fieldName, formatString)
CodeMethodInvokeExpression evalExpr = new CodeMethodInvokeExpression();
evalExpr.Method.TargetObject = new CodeThisReferenceExpression();
evalExpr.Method.MethodName = EvalMethodName;
evalExpr.Parameters.Add(new CodePrimitiveExpression(field));
if (!String.IsNullOrEmpty(formatString)) {
evalExpr.Parameters.Add(new CodePrimitiveExpression(formatString));
}
CodeStatementCollection evalStatements = new CodeStatementCollection();
BuildPropertySetExpression(evalExpr, propertyName, propertyType, controlBuilder, methodStatements, evalStatements, linePragma, ref hasTempObject);
// if (this.Page.GetDataItem() != null)
CodeMethodInvokeExpression getDataItemExpr = new CodeMethodInvokeExpression();
getDataItemExpr.Method.TargetObject = new CodePropertyReferenceExpression(new CodeThisReferenceExpression(), "Page");
getDataItemExpr.Method.MethodName = GetDataItemMethodName;
CodeConditionStatement ifStmt = new CodeConditionStatement();
ifStmt.Condition = new CodeBinaryOperatorExpression(getDataItemExpr,
CodeBinaryOperatorType.IdentityInequality,
new CodePrimitiveExpression(null));
ifStmt.TrueStatements.AddRange(evalStatements);
statements.Add(ifStmt);
}
private static void BuildPropertySetExpression(CodeExpression expression, string propertyName,
Type propertyType, ControlBuilder controlBuilder, CodeStatementCollection methodStatements, CodeStatementCollection statements, CodeLinePragma linePragma, ref bool hasTempObject) {
CodeDomUtility.CreatePropertySetStatements(methodStatements, statements,
new CodeVariableReferenceExpression("dataBindingExpressionBuilderTarget"), propertyName, propertyType,
expression,
linePragma);
}
internal static void BuildExpressionSetup(ControlBuilder controlBuilder, CodeStatementCollection methodStatements, CodeStatementCollection statements) {
// {{controlType}} target;
CodeVariableDeclarationStatement targetDecl = new CodeVariableDeclarationStatement(controlBuilder.ControlType, "dataBindingExpressionBuilderTarget");
methodStatements.Add(targetDecl);
CodeVariableReferenceExpression targetExp = new CodeVariableReferenceExpression(targetDecl.Name);
// target = ({{controlType}}) sender;
CodeAssignStatement setTarget = new CodeAssignStatement(targetExp,
new CodeCastExpression(controlBuilder.ControlType,
new CodeArgumentReferenceExpression("sender")));
statements.Add(setTarget);
Type bindingContainerType = controlBuilder.BindingContainerType;
CodeVariableDeclarationStatement containerDecl = new CodeVariableDeclarationStatement(bindingContainerType, "Container");
methodStatements.Add(containerDecl);
// {{containerType}} Container = ({{containerType}}) target.BindingContainer;
CodeAssignStatement setContainer = new CodeAssignStatement(new CodeVariableReferenceExpression(containerDecl.Name),
new CodeCastExpression(bindingContainerType,
new CodePropertyReferenceExpression(targetExp,
"BindingContainer")));
statements.Add(setContainer);
}
internal override void BuildExpression(BoundPropertyEntry bpe, ControlBuilder controlBuilder,
CodeExpression controlReference, CodeStatementCollection methodStatements, CodeStatementCollection statements, CodeLinePragma linePragma, ref bool hasTempObject) {
BuildExpressionStatic(bpe, controlBuilder, controlReference, methodStatements, statements, linePragma, ref hasTempObject);
}
internal static void BuildExpressionStatic(BoundPropertyEntry bpe, ControlBuilder controlBuilder,
CodeExpression controlReference, CodeStatementCollection methodStatements, CodeStatementCollection statements, CodeLinePragma linePragma, ref bool hasTempObject) {
CodeExpression expr = new CodeSnippetExpression(bpe.Expression);
BuildPropertySetExpression(expr, bpe.Name, bpe.Type, controlBuilder, methodStatements, statements, linePragma, ref hasTempObject);
}
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry,
object parsedData, ExpressionBuilderContext context) {
Debug.Fail("This should never be called");
return null;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DupHandleConnectionReader.cs
- ProcessThread.cs
- MenuItem.cs
- ThemeDictionaryExtension.cs
- ExpressionConverter.cs
- _BasicClient.cs
- ConfigurationElementProperty.cs
- GacUtil.cs
- EdmFunctionAttribute.cs
- MethodBody.cs
- AccessDataSourceDesigner.cs
- PageRequestManager.cs
- PkcsMisc.cs
- BitmapEffectDrawing.cs
- SkipQueryOptionExpression.cs
- PropertyValueChangedEvent.cs
- ManipulationStartedEventArgs.cs
- Popup.cs
- ContainerAction.cs
- Blend.cs
- UnmanagedMarshal.cs
- CompModSwitches.cs
- xsdvalidator.cs
- ImageKeyConverter.cs
- BaseValidator.cs
- SqlGenericUtil.cs
- PanelStyle.cs
- SelectionManager.cs
- PipeSecurity.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- querybuilder.cs
- DivideByZeroException.cs
- DecimalConverter.cs
- DataTemplateSelector.cs
- PtsHost.cs
- RedirectionProxy.cs
- XmlSchemaNotation.cs
- BevelBitmapEffect.cs
- DataSvcMapFile.cs
- MembershipSection.cs
- RepeaterItemCollection.cs
- TableLayoutRowStyleCollection.cs
- DiscoveryDocumentReference.cs
- InstanceDataCollection.cs
- EntityContainerRelationshipSetEnd.cs
- EntityDataSourceReferenceGroup.cs
- EntityDataSourceQueryBuilder.cs
- OleDbSchemaGuid.cs
- ExpressionVisitor.cs
- RuleProcessor.cs
- WebPartUtil.cs
- figurelengthconverter.cs
- TextAdaptor.cs
- NativeMethodsCLR.cs
- AssemblyFilter.cs
- CoTaskMemSafeHandle.cs
- SchemaTypeEmitter.cs
- Evidence.cs
- CFStream.cs
- SqlDataSourceFilteringEventArgs.cs
- ContractReference.cs
- SymbolEqualComparer.cs
- PixelFormatConverter.cs
- WebZone.cs
- EntityTypeBase.cs
- WebBrowserNavigatingEventHandler.cs
- TabItem.cs
- InternalConfigEventArgs.cs
- ImpersonationContext.cs
- SqlMethods.cs
- UnsafeNativeMethods.cs
- ImageField.cs
- ActivityDesignerLayoutSerializers.cs
- DataGridViewAutoSizeModeEventArgs.cs
- _LocalDataStoreMgr.cs
- RegexRunner.cs
- ContentElementAutomationPeer.cs
- PathSegmentCollection.cs
- CompleteWizardStep.cs
- StaticSiteMapProvider.cs
- TakeOrSkipQueryOperator.cs
- DeviceContexts.cs
- PolyLineSegment.cs
- Int32Rect.cs
- FontStyleConverter.cs
- GridToolTip.cs
- Msmq4SubqueuePoisonHandler.cs
- CompositeClientFormatter.cs
- SafeNativeMethods.cs
- EpmTargetTree.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- FixedSOMPageElement.cs
- figurelength.cs
- SQLByte.cs
- RoutedPropertyChangedEventArgs.cs
- AuthenticationException.cs
- TypefaceCollection.cs
- ApplicationDirectory.cs
- MultiSelector.cs
- AnnotationComponentChooser.cs