Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / UI / DataBoundLiteralControl.cs / 1 / DataBoundLiteralControl.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* Control that holds databinding expressions and literals
*
* Copyright (c) 1999 Microsoft Corporation
*/
namespace System.Web.UI {
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.IO;
using System.Text;
using System.Security.Permissions;
using System.Web.Util;
internal class DataBoundLiteralControlBuilder : ControlBuilder {
internal DataBoundLiteralControlBuilder() {
}
internal void AddLiteralString(string s) {
Debug.Assert(!InDesigner, "!InDesigner");
// Make sure strings and databinding expressions alternate
object lastBuilder = GetLastBuilder();
if (lastBuilder != null && lastBuilder is string) {
AddSubBuilder(null);
}
AddSubBuilder(s);
}
internal void AddDataBindingExpression(CodeBlockBuilder codeBlockBuilder) {
Debug.Assert(!InDesigner, "!InDesigner");
// Make sure strings and databinding expressions alternate
object lastBuilder = GetLastBuilder();
if (lastBuilder == null || lastBuilder is CodeBlockBuilder) {
AddSubBuilder(null);
}
AddSubBuilder(codeBlockBuilder);
}
internal int GetStaticLiteralsCount() {
// it's divided by 2 because half are strings and half are databinding
// expressions). '+1' because we always start with a literal string.
return (SubBuilders.Count+1) / 2;
}
internal int GetDataBoundLiteralCount() {
// it's divided by 2 because half are strings and half are databinding
// expressions)
return SubBuilders.Count / 2;
}
}
///
/// Defines the properties and methods of the DataBoundLiteralControl class.
///
[
ToolboxItem(false)
]
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
public sealed class DataBoundLiteralControl : Control, ITextControl {
private string[] _staticLiterals;
private string[] _dataBoundLiteral;
private bool _hasDataBoundStrings;
///
public DataBoundLiteralControl(int staticLiteralsCount, int dataBoundLiteralCount) {
_staticLiterals = new string[staticLiteralsCount];
_dataBoundLiteral = new string[dataBoundLiteralCount];
PreventAutoID();
}
///
public void SetStaticString(int index, string s) {
_staticLiterals[index] = s;
}
///
public void SetDataBoundString(int index, string s) {
_dataBoundLiteral[index] = s;
_hasDataBoundStrings = true;
}
///
/// Gets the text content of the data-bound literal control.
///
public string Text {
get {
StringBuilder sb = new StringBuilder();
int dataBoundLiteralCount = _dataBoundLiteral.Length;
// Append literal and databound strings alternatively
for (int i=0; i<_staticLiterals.Length; i++) {
if (_staticLiterals[i] != null)
sb.Append(_staticLiterals[i]);
// Could be null if DataBind() was not called
if (i < dataBoundLiteralCount && _dataBoundLiteral[i] != null)
sb.Append(_dataBoundLiteral[i]);
}
return sb.ToString();
}
}
///
protected override ControlCollection CreateControlCollection() {
return new EmptyControlCollection(this);
}
///
///
/// Loads the previously saved state. Overridden to synchronize Text property with
/// LiteralContent.
///
protected override void LoadViewState(object savedState) {
if (savedState != null) {
_dataBoundLiteral = (string[]) savedState;
_hasDataBoundStrings = true;
}
}
///
///
/// The object that contains the state changes.
///
protected override object SaveViewState() {
// Return null if we didn't get any databound strings
if (!_hasDataBoundStrings)
return null;
// Only save the databound literals to the view state
return _dataBoundLiteral;
}
///
protected internal override void Render(HtmlTextWriter output) {
int dataBoundLiteralCount = _dataBoundLiteral.Length;
// Render literal and databound strings alternatively
for (int i=0; i<_staticLiterals.Length; i++) {
if (_staticLiterals[i] != null)
output.Write(_staticLiterals[i]);
// Could be null if DataBind() was not called
if (i < dataBoundLiteralCount && _dataBoundLiteral[i] != null)
output.Write(_dataBoundLiteral[i]);
}
}
///
///
/// Implementation of TextControl.Text property.
///
string ITextControl.Text {
get {
return Text;
}
set {
throw new NotSupportedException();
}
}
}
///
/// Simpler version of DataBoundLiteralControlBuilder, used at design time.
///
[
DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, " + AssemblyRef.SystemDesign),
ToolboxItem(false)
]
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
public sealed class DesignerDataBoundLiteralControl : Control {
private string _text;
public DesignerDataBoundLiteralControl() {
PreventAutoID();
}
///
/// Gets or sets the text content of the data-bound literal control.
///
public string Text {
get {
return _text;
}
set {
_text = (value != null) ? value : String.Empty;
}
}
protected override ControlCollection CreateControlCollection() {
return new EmptyControlCollection(this);
}
///
/// Loads the previously saved state. Overridden to synchronize Text property with
/// LiteralContent.
///
protected override void LoadViewState(object savedState) {
if (savedState != null)
_text = (string) savedState;
}
///
/// Saves any state that was modified after the control began monitoring state changes.
///
protected internal override void Render(HtmlTextWriter output) {
output.Write(_text);
}
///
/// The object that contains the state changes.
///
protected override object SaveViewState() {
return _text;
}
}
}
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AdRotator.cs
- URL.cs
- ForceCopyBuildProvider.cs
- ShapingWorkspace.cs
- ErrorInfoXmlDocument.cs
- UseManagedPresentationElement.cs
- FileDialogPermission.cs
- JoinTreeSlot.cs
- XPathDescendantIterator.cs
- ValidationHelpers.cs
- RuntimeCompatibilityAttribute.cs
- TdsEnums.cs
- IsolatedStorageFileStream.cs
- GridViewRow.cs
- SpellerInterop.cs
- CustomWebEventKey.cs
- RightsManagementPermission.cs
- HtmlGenericControl.cs
- SingleStorage.cs
- SafeMemoryMappedFileHandle.cs
- EventLog.cs
- TimelineGroup.cs
- ResolveCriteria11.cs
- MILUtilities.cs
- BitmapEffectInput.cs
- SocketElement.cs
- LookupTables.cs
- BaseValidator.cs
- MultiTrigger.cs
- SqlBulkCopyColumnMappingCollection.cs
- Metafile.cs
- ConfigXmlAttribute.cs
- ExpiredSecurityTokenException.cs
- TrackingStringDictionary.cs
- CategoryGridEntry.cs
- UDPClient.cs
- MemoryMappedView.cs
- TranslateTransform3D.cs
- DebugHandleTracker.cs
- InvalidProgramException.cs
- ClusterSafeNativeMethods.cs
- RawStylusInputReport.cs
- Bits.cs
- HashFinalRequest.cs
- BufferedGraphicsManager.cs
- SqlErrorCollection.cs
- Ipv6Element.cs
- ArcSegment.cs
- FollowerQueueCreator.cs
- RayMeshGeometry3DHitTestResult.cs
- Utils.cs
- ArrangedElementCollection.cs
- SecurityTokenParameters.cs
- GroupBoxRenderer.cs
- AppDomain.cs
- SocketElement.cs
- CryptoConfig.cs
- MobileSysDescriptionAttribute.cs
- AutoGeneratedFieldProperties.cs
- GeneralTransform3DTo2DTo3D.cs
- GatewayDefinition.cs
- MD5CryptoServiceProvider.cs
- PageThemeCodeDomTreeGenerator.cs
- SafeTokenHandle.cs
- BridgeDataReader.cs
- OptimisticConcurrencyException.cs
- BuiltInPermissionSets.cs
- MenuStrip.cs
- AbstractExpressions.cs
- TraceSection.cs
- TimeIntervalCollection.cs
- SoapIgnoreAttribute.cs
- HandlerWithFactory.cs
- GenericTextProperties.cs
- ConditionBrowserDialog.cs
- DataBindingCollection.cs
- UIElementHelper.cs
- RuntimeArgument.cs
- WebExceptionStatus.cs
- DataGridViewColumn.cs
- unsafenativemethodstextservices.cs
- UnsafeNativeMethods.cs
- _DigestClient.cs
- TriState.cs
- PipeException.cs
- ErrorEventArgs.cs
- MethodImplAttribute.cs
- HandleCollector.cs
- TypedAsyncResult.cs
- LinqDataView.cs
- ProcessHostMapPath.cs
- ToolStripItemGlyph.cs
- TextBlockAutomationPeer.cs
- Int64Storage.cs
- UnsafeNativeMethods.cs
- ParentControlDesigner.cs
- SourceFilter.cs
- Normalizer.cs
- SplitterEvent.cs
- MediaTimeline.cs