Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / xsp / System / Web / UI / WebControls / DataBoundControlHelper.cs / 3 / DataBoundControlHelper.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI.WebControls {
using System;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Data;
using System.Security.Permissions;
using System.Web.Util;
///
/// Helper class for DataBoundControls and v1 data controls.
/// This is also used by ControlParameter to find its associated
/// control.
///
internal static class DataBoundControlHelper {
///
/// Walks up the stack of NamingContainers starting at 'control' to find a control with the ID 'controlID'.
///
public static Control FindControl(Control control, string controlID) {
Debug.Assert(control != null, "control should not be null");
Debug.Assert(!String.IsNullOrEmpty(controlID), "controlID should not be empty");
Control currentContainer = control;
Control foundControl = null;
if (control == control.Page) {
// If we get to the Page itself while we're walking up the
// hierarchy, just return whatever item we find (if anything)
// since we can't walk any higher.
return control.FindControl(controlID);
}
while (foundControl == null && currentContainer != control.Page) {
currentContainer = currentContainer.NamingContainer;
if (currentContainer == null) {
throw new HttpException(SR.GetString(SR.DataBoundControlHelper_NoNamingContainer, control.GetType().Name, control.ID));
}
foundControl = currentContainer.FindControl(controlID);
}
return foundControl;
}
///
// return true if the two string arrays have the same members
///
public static bool CompareStringArrays(string[] stringA, string[] stringB) {
if (stringA == null && stringB == null) {
return true;
}
if (stringA == null || stringB == null) {
return false;
}
if (stringA.Length != stringB.Length) {
return false;
}
for (int i = 0; i < stringA.Length; i++) {
if (!String.Equals(stringA[i], stringB[i], StringComparison.Ordinal)) {
return false;
}
}
return true;
}
// Returns true for types that can be automatically databound in controls such as
// GridView and DetailsView. Bindable types are simple types, such as primitives, strings,
// and nullable primitives.
public static bool IsBindableType(Type type) {
if (type == null) {
return false;
}
Type underlyingType = Nullable.GetUnderlyingType(type);
if (underlyingType != null) {
// If the type is Nullable then it has an underlying type, in which case
// we want to
type = underlyingType;
}
return (type.IsPrimitive ||
(type == typeof(string)) ||
(type == typeof(DateTime)) ||
(type == typeof(Decimal)) ||
(type == typeof(Guid)) ||
// support for new SqlServer 2008 types:
(type == typeof(DateTimeOffset)) ||
(type == typeof(TimeSpan)));
}
internal static void ExtractValuesFromBindableControls(IOrderedDictionary dictionary, Control container) {
IBindableControl bindableControl = container as IBindableControl;
if (bindableControl != null) {
bindableControl.ExtractValues(dictionary);
}
foreach (Control childControl in container.Controls) {
ExtractValuesFromBindableControls(dictionary, childControl);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DataServiceRequest.cs
- DesignerForm.cs
- Privilege.cs
- KernelTypeValidation.cs
- WebPartZoneCollection.cs
- XdrBuilder.cs
- SwitchAttribute.cs
- ClientConvert.cs
- TableRowCollection.cs
- CommonXSendMessage.cs
- TypeCollectionPropertyEditor.cs
- WebRequestModuleElementCollection.cs
- CheckBox.cs
- PackageStore.cs
- EventQueueState.cs
- dataobject.cs
- EntityViewGenerator.cs
- _NetRes.cs
- TextMarkerSource.cs
- TableLayoutColumnStyleCollection.cs
- WindowsScrollBarBits.cs
- DataGridColumnEventArgs.cs
- ObjectDataSourceDisposingEventArgs.cs
- XmlIterators.cs
- ToolboxBitmapAttribute.cs
- HttpListenerException.cs
- MissingMemberException.cs
- Parameter.cs
- X509ChainElement.cs
- RouteUrlExpressionBuilder.cs
- PropertyPathWorker.cs
- CompModHelpers.cs
- ProgressPage.cs
- FileVersionInfo.cs
- SoapFormatter.cs
- Stackframe.cs
- future.cs
- DbProviderFactoriesConfigurationHandler.cs
- InProcStateClientManager.cs
- WmpBitmapDecoder.cs
- DbDataRecord.cs
- SizeLimitedCache.cs
- DBCommandBuilder.cs
- Geometry3D.cs
- MemoryStream.cs
- CapacityStreamGeometryContext.cs
- PageEventArgs.cs
- ContractUtils.cs
- ItemList.cs
- ContentFilePart.cs
- _Connection.cs
- XmlSortKeyAccumulator.cs
- DbConnectionPoolOptions.cs
- ParameterCollectionEditorForm.cs
- PageTheme.cs
- SqlCommandSet.cs
- RectValueSerializer.cs
- KeyedHashAlgorithm.cs
- DataGridViewDataConnection.cs
- AutomationPatternInfo.cs
- ConfigurationStrings.cs
- SqlConnectionHelper.cs
- AutomationPatternInfo.cs
- CompensateDesigner.cs
- OfTypeExpression.cs
- KeyMatchBuilder.cs
- XmlBinaryWriterSession.cs
- ExpressionReplacer.cs
- StrokeFIndices.cs
- TreeNodeStyle.cs
- ServiceObjectContainer.cs
- GeneratedContractType.cs
- TemplateXamlTreeBuilder.cs
- WindowsContainer.cs
- SerializableAttribute.cs
- DataGridTextBox.cs
- SqlExpressionNullability.cs
- EditorZone.cs
- URLIdentityPermission.cs
- BindingsCollection.cs
- IdleTimeoutMonitor.cs
- WebBrowserContainer.cs
- MatrixStack.cs
- RequestDescription.cs
- SettingsAttributes.cs
- LogArchiveSnapshot.cs
- Point.cs
- SafeThreadHandle.cs
- XpsSerializerFactory.cs
- Application.cs
- SmiContextFactory.cs
- GridViewAutomationPeer.cs
- BuilderPropertyEntry.cs
- CommandField.cs
- CodeDomConfigurationHandler.cs
- List.cs
- Floater.cs
- PropertyOrder.cs
- WeakEventTable.cs
- SiteMapSection.cs