Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / xsp / System / Web / UI / WebControls / CompositeDataBoundControl.cs / 1 / CompositeDataBoundControl.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI.WebControls {
using System;
using System.Collections;
using System.Security.Permissions;
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
public abstract class CompositeDataBoundControl : DataBoundControl, INamingContainer {
internal const string ItemCountViewStateKey = "_!ItemCount";
public override ControlCollection Controls {
get {
EnsureChildControls();
return base.Controls;
}
}
///
/// Overriden by DataBoundControl to determine if the control should
/// recreate its control hierarchy based on values in view state.
/// If the control hierarchy should be created, i.e. view state does
/// exist, it calls CreateChildControls with a dummy (empty) data source
/// which is usable for enumeration purposes only.
///
protected internal override void CreateChildControls() {
Controls.Clear();
object controlCount = ViewState[ItemCountViewStateKey];
if (controlCount == null && RequiresDataBinding) {
EnsureDataBound();
}
if (controlCount != null && ((int)controlCount) != -1) {
DummyDataSource dummyDataSource = new DummyDataSource((int)controlCount);
CreateChildControls(dummyDataSource, false);
ClearChildViewState();
}
}
///
/// Performs the work of creating the control hierarchy based on a data source.
/// When dataBinding is true, the specified data source contains real
/// data, and the data is supposed to be pushed into the UI.
/// When dataBinding is false, the specified data source is a dummy data
/// source, that allows enumerating the right number of items, but the items
/// themselves are null and do not contain data. In this case, the recreated
/// control hierarchy reinitializes its state from view state.
/// It enables a DataBoundControl to encapsulate the logic of creating its
/// control hierarchy in both modes into a single code path.
///
///
/// The data source to be used to enumerate items.
///
///
/// Whether the method has been called from DataBind or not.
///
///
/// The number of items created based on the data source. Put another way, its
/// the number of items enumerated from the data source.
///
protected abstract int CreateChildControls(IEnumerable dataSource,
bool dataBinding);
///
/// Overriden by DataBoundControl to use its properties to determine the real
/// data source that the control should bind to. It then clears the existing
/// control hierarchy, and calls createChildControls to create a new control
/// hierarchy based on the resolved data source.
/// The implementation resolves various data source related properties to
/// arrive at the appropriate IEnumerable implementation to use as the real
/// data source.
/// When resolving data sources, the DataSourceControlID takes highest precedence.
/// In this mode, DataMember is used to access the appropriate list from the
/// DataControl.
/// If DataSourceControlID is not set, the value of the DataSource property is used.
/// In this second alternative, DataMember is used to extract the appropriate
/// list if the control has been handed an IListSource as a data source.
///
protected internal override void PerformDataBinding(IEnumerable data) {
base.PerformDataBinding(data);
Controls.Clear();
ClearChildViewState();
TrackViewState();
int controlCount = CreateChildControls(data, true);
ChildControlsCreated = true;
ViewState[ItemCountViewStateKey] = controlCount;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI.WebControls {
using System;
using System.Collections;
using System.Security.Permissions;
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
public abstract class CompositeDataBoundControl : DataBoundControl, INamingContainer {
internal const string ItemCountViewStateKey = "_!ItemCount";
public override ControlCollection Controls {
get {
EnsureChildControls();
return base.Controls;
}
}
///
/// Overriden by DataBoundControl to determine if the control should
/// recreate its control hierarchy based on values in view state.
/// If the control hierarchy should be created, i.e. view state does
/// exist, it calls CreateChildControls with a dummy (empty) data source
/// which is usable for enumeration purposes only.
///
protected internal override void CreateChildControls() {
Controls.Clear();
object controlCount = ViewState[ItemCountViewStateKey];
if (controlCount == null && RequiresDataBinding) {
EnsureDataBound();
}
if (controlCount != null && ((int)controlCount) != -1) {
DummyDataSource dummyDataSource = new DummyDataSource((int)controlCount);
CreateChildControls(dummyDataSource, false);
ClearChildViewState();
}
}
///
/// Performs the work of creating the control hierarchy based on a data source.
/// When dataBinding is true, the specified data source contains real
/// data, and the data is supposed to be pushed into the UI.
/// When dataBinding is false, the specified data source is a dummy data
/// source, that allows enumerating the right number of items, but the items
/// themselves are null and do not contain data. In this case, the recreated
/// control hierarchy reinitializes its state from view state.
/// It enables a DataBoundControl to encapsulate the logic of creating its
/// control hierarchy in both modes into a single code path.
///
///
/// The data source to be used to enumerate items.
///
///
/// Whether the method has been called from DataBind or not.
///
///
/// The number of items created based on the data source. Put another way, its
/// the number of items enumerated from the data source.
///
protected abstract int CreateChildControls(IEnumerable dataSource,
bool dataBinding);
///
/// Overriden by DataBoundControl to use its properties to determine the real
/// data source that the control should bind to. It then clears the existing
/// control hierarchy, and calls createChildControls to create a new control
/// hierarchy based on the resolved data source.
/// The implementation resolves various data source related properties to
/// arrive at the appropriate IEnumerable implementation to use as the real
/// data source.
/// When resolving data sources, the DataSourceControlID takes highest precedence.
/// In this mode, DataMember is used to access the appropriate list from the
/// DataControl.
/// If DataSourceControlID is not set, the value of the DataSource property is used.
/// In this second alternative, DataMember is used to extract the appropriate
/// list if the control has been handed an IListSource as a data source.
///
protected internal override void PerformDataBinding(IEnumerable data) {
base.PerformDataBinding(data);
Controls.Clear();
ClearChildViewState();
TrackViewState();
int controlCount = CreateChildControls(data, true);
ChildControlsCreated = true;
ViewState[ItemCountViewStateKey] = controlCount;
}
}
}
// 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
- ProgressChangedEventArgs.cs
- ContentOperations.cs
- GenericRootAutomationPeer.cs
- TransformPattern.cs
- PanelStyle.cs
- ToolboxComponentsCreatedEventArgs.cs
- RefExpr.cs
- RadioButton.cs
- UriTemplateHelpers.cs
- ScopelessEnumAttribute.cs
- TextParaLineResult.cs
- ExecutionContext.cs
- BevelBitmapEffect.cs
- FormViewInsertedEventArgs.cs
- TerminatorSinks.cs
- PagedDataSource.cs
- JsonCollectionDataContract.cs
- ScriptManagerProxy.cs
- IpcChannelHelper.cs
- FixedElement.cs
- VisualCollection.cs
- OleDbWrapper.cs
- CursorConverter.cs
- ExpressionDumper.cs
- ProjectionPruner.cs
- AppDomainCompilerProxy.cs
- MachineKey.cs
- TextEffectResolver.cs
- CommunicationObjectManager.cs
- ResourceWriter.cs
- SqlGatherProducedAliases.cs
- VerificationAttribute.cs
- HttpConfigurationSystem.cs
- WorkflowWebService.cs
- QueryRewriter.cs
- RoleManagerEventArgs.cs
- IteratorFilter.cs
- DesignerVerb.cs
- Monitor.cs
- ResXDataNode.cs
- SqlComparer.cs
- HashCryptoHandle.cs
- LexicalChunk.cs
- HtmlTableRow.cs
- DetailsView.cs
- WindowsGraphicsCacheManager.cs
- _NestedSingleAsyncResult.cs
- Deserializer.cs
- SchemaTableColumn.cs
- SrgsDocumentParser.cs
- SqlBooleanMismatchVisitor.cs
- SortedList.cs
- ServerIdentity.cs
- LocalFileSettingsProvider.cs
- MruCache.cs
- ListBoxItemAutomationPeer.cs
- InstanceHandle.cs
- Line.cs
- DocumentReferenceCollection.cs
- DataGridCellInfo.cs
- Canvas.cs
- ParameterExpression.cs
- ConnectionManagementElementCollection.cs
- XmlChildNodes.cs
- ValidationVisibilityAttribute.cs
- SerializationException.cs
- PageCatalogPartDesigner.cs
- CheckPair.cs
- StoreItemCollection.cs
- FontDriver.cs
- XmlSchemaParticle.cs
- BindMarkupExtensionSerializer.cs
- GPPOINT.cs
- DataFormat.cs
- SqlCommandSet.cs
- Action.cs
- Crypto.cs
- CompilerCollection.cs
- CryptoHelper.cs
- CaseInsensitiveOrdinalStringComparer.cs
- EditingScopeUndoUnit.cs
- SmiContext.cs
- GlyphShapingProperties.cs
- ProfileServiceManager.cs
- CodeGenerationManager.cs
- DataGridViewAutoSizeColumnsModeEventArgs.cs
- WindowsFormsLinkLabel.cs
- CfgParser.cs
- FileRecordSequenceHelper.cs
- XmlUtf8RawTextWriter.cs
- TraceSection.cs
- QuaternionAnimation.cs
- CellTreeNode.cs
- ScrollItemPattern.cs
- MDIClient.cs
- AcceptorSessionSymmetricMessageSecurityProtocol.cs
- FileDialog_Vista.cs
- ServiceModelStringsVersion1.cs
- ApplicationSecurityInfo.cs
- SinglePhaseEnlistment.cs