Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / xsp / System / Web / UI / WebControls / DataKey.cs / 1305376 / DataKey.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI.WebControls {
using System;
using System.Collections;
using System.Collections.Specialized;
using System.Diagnostics.CodeAnalysis;
///
///
public class DataKey : IStateManager, IEquatable {
private IOrderedDictionary _keyTable;
private bool _isTracking;
private string[] _keyNames;
public DataKey(IOrderedDictionary keyTable) {
_keyTable = keyTable;
}
public DataKey(IOrderedDictionary keyTable, string[] keyNames)
: this(keyTable) {
_keyNames = keyNames;
}
///
/// Inheritable overridable implementation of IsTrackingViewState
///
protected virtual bool IsTrackingViewState {
get {
return _isTracking;
}
}
public virtual object this[int index] {
get {
if (_keyTable != null) {
return _keyTable[index];
}
return null;
}
}
public virtual object this[string name] {
get {
if (_keyTable != null) {
return _keyTable[name];
}
return null;
}
}
public virtual object Value {
get {
if ((_keyTable != null) && (_keyTable.Count > 0)) {
return _keyTable[0];
}
return null;
}
}
public virtual IOrderedDictionary Values {
get {
if (_keyTable == null) {
return null;
}
if (_keyTable is OrderedDictionary) {
return ((OrderedDictionary)_keyTable).AsReadOnly();
}
// don't return the actual table because we don't want the user to mess with it.
if (_keyTable is ICloneable) {
return (IOrderedDictionary)((ICloneable)_keyTable).Clone();
}
OrderedDictionary table = new OrderedDictionary();
foreach (DictionaryEntry entry in _keyTable) {
table.Add(entry.Key, entry.Value);
}
return table.AsReadOnly();
}
}
///
/// Inheritable overridable implementation of LoadViewState
///
protected virtual void LoadViewState(object state) {
if (state != null) {
if (_keyNames != null) {
object[] myState = (object[])state;
// if we have key names, then we only stored values.
if (myState[0] != null) {
for (int i = 0; i < myState.Length && i < _keyNames.Length; i++) {
_keyTable.Add(_keyNames[i], myState[i]);
}
}
}
else {
if (state != null) {
ArrayList stateArrayList = state as ArrayList;
if (stateArrayList == null) {
throw new HttpException(SR.GetString(SR.ViewState_InvalidViewState));
}
OrderedDictionaryStateHelper.LoadViewState(_keyTable, stateArrayList);
}
}
}
}
///
/// Inheritable overridable implementation of SaveViewState
///
protected virtual object SaveViewState() {
int count = _keyTable.Count;
if (count > 0) {
object myState;
if (_keyNames != null) {
// if we have key names, then we only have to store values.
myState = new object[count];
for (int i = 0; i < count; i++) {
((object[])myState)[i] = _keyTable[i];
}
}
else {
myState = OrderedDictionaryStateHelper.SaveViewState(_keyTable);
}
return myState;
}
return null;
}
///
/// Inheritable overridable implementation of TrackViewState
///
protected virtual void TrackViewState() {
_isTracking = true;
}
#region IStateManager implementation
///
bool IStateManager.IsTrackingViewState {
get {
return IsTrackingViewState;
}
}
///
void IStateManager.LoadViewState(object state) {
LoadViewState(state);
}
///
object IStateManager.SaveViewState() {
return SaveViewState();
}
///
void IStateManager.TrackViewState() {
TrackViewState();
}
#endregion
#region IEquatable Members
[SuppressMessage("Microsoft.Security", "CA2123:OverrideLinkDemandsShouldBeIdenticalToBase")]
public bool Equals(DataKey other) {
if (other == null) {
return false;
}
string[] aKeys = _keyNames;
string[] bKeys = other._keyNames;
if (aKeys == null && _keyTable != null) {
aKeys = new string[_keyTable.Count];
_keyTable.Keys.CopyTo(aKeys, 0);
}
if (bKeys == null && _keyTable != null) {
bKeys = new string[other._keyTable.Count];
other._keyTable.Keys.CopyTo(bKeys, 0);
}
// Compare the keys array
bool hasSameKeyNames = DataBoundControlHelper.CompareStringArrays(aKeys, bKeys);
if (hasSameKeyNames) {
if (aKeys != null && bKeys != null) {
foreach (string key in aKeys) {
if (!Object.Equals(this[key], other[key])) {
return false;
}
}
}
return true;
}
return false;
}
#endregion
}
}
// 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
- RequestCachePolicy.cs
- Button.cs
- TextInfo.cs
- StorageComplexTypeMapping.cs
- HeaderedContentControl.cs
- QueryMath.cs
- Vector.cs
- EditorBrowsableAttribute.cs
- ServiceContractListItem.cs
- SqlInternalConnection.cs
- MediaEntryAttribute.cs
- LinqDataSource.cs
- FunctionImportElement.cs
- SqlTypeConverter.cs
- Mappings.cs
- SafeNativeMethodsOther.cs
- ProjectionPlan.cs
- ToolStripContainer.cs
- TcpConnectionPool.cs
- ConnectionPoolManager.cs
- JapaneseCalendar.cs
- DataRowCollection.cs
- CompModHelpers.cs
- ScopelessEnumAttribute.cs
- VariableAction.cs
- TrackingCondition.cs
- ListViewCommandEventArgs.cs
- DesignerForm.cs
- CqlWriter.cs
- ExecutionContext.cs
- QuaternionIndependentAnimationStorage.cs
- CustomPopupPlacement.cs
- GlyphInfoList.cs
- KeyValuePairs.cs
- RuleSettings.cs
- EditorZoneBase.cs
- DeflateEmulationStream.cs
- SendingRequestEventArgs.cs
- UriWriter.cs
- DbConvert.cs
- ClockController.cs
- DataGridViewRowCollection.cs
- HandleCollector.cs
- TokenBasedSet.cs
- OSFeature.cs
- RenderDataDrawingContext.cs
- PointF.cs
- ObjectStateFormatter.cs
- ListParaClient.cs
- WebPartAddingEventArgs.cs
- OutputCacheEntry.cs
- AxHost.cs
- FixedSOMTable.cs
- FileStream.cs
- AppDomainManager.cs
- DataControlCommands.cs
- ValidatorCollection.cs
- AppearanceEditorPart.cs
- XpsFilter.cs
- activationcontext.cs
- TypedTableBase.cs
- HMACSHA384.cs
- BamlRecordHelper.cs
- RelationshipSet.cs
- log.cs
- Scripts.cs
- X509Extension.cs
- MetadataCacheItem.cs
- CodeMemberMethod.cs
- EntityTypeBase.cs
- InvariantComparer.cs
- RootBuilder.cs
- AuthenticatedStream.cs
- Vector3DCollectionConverter.cs
- MailSettingsSection.cs
- WindowsListViewItem.cs
- GridViewPageEventArgs.cs
- TagPrefixCollection.cs
- ConfigurationSectionGroupCollection.cs
- XmlSchemaChoice.cs
- DesignerValidatorAdapter.cs
- PreviousTrackingServiceAttribute.cs
- DesignerTransaction.cs
- EncryptionUtility.cs
- DatePickerTextBox.cs
- ToolStripRendererSwitcher.cs
- DataGridViewCellCancelEventArgs.cs
- IdnElement.cs
- CultureInfoConverter.cs
- RequestCacheValidator.cs
- ConfigurationStrings.cs
- ServiceProviders.cs
- DataGridParentRows.cs
- SweepDirectionValidation.cs
- StrokeNodeEnumerator.cs
- DbConnectionHelper.cs
- FormViewUpdateEventArgs.cs
- ErrorStyle.cs
- TypeElement.cs
- WebPartConnectionsEventArgs.cs