Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WebForms / System / Web / UI / Design / WebControls / ListControlDesigner.cs / 1 / ListControlDesigner.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Web.UI.Design.WebControls {
using System;
using System.Design;
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Diagnostics;
using System.IO;
using System.Data;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.Design.Util;
using System.Web.UI.WebControls;
using System.Windows.Forms.Design;
using DialogResult = System.Windows.Forms.DialogResult;
using AttributeCollection = System.ComponentModel.AttributeCollection;
using DataBinding = System.Web.UI.DataBinding;
///
///
///
/// This is the base class for all
/// designers.
///
///
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)]
[SupportsPreviewControl(true)]
public class ListControlDesigner : DataBoundControlDesigner {
///
///
///
/// Initializes a new instance of
/// .
///
///
public ListControlDesigner() {
}
///
///
/// Adds designer actions to the ActionLists collection.
///
public override DesignerActionListCollection ActionLists {
get {
DesignerActionListCollection actionLists = new DesignerActionListCollection();
actionLists.AddRange(base.ActionLists);
actionLists.Add(new ListControlActionList(this, DataSourceDesigner));
return actionLists;
}
}
///
///
///
public string DataValueField {
get {
return ((ListControl)Component).DataValueField;
}
set {
((ListControl)Component).DataValueField = value;
}
}
///
///
/// Retrieves the HTML to be used for the design time representation of the control runtime.
///
public string DataTextField {
get {
return ((ListControl)Component).DataTextField;
}
set {
((ListControl)Component).DataTextField = value;
}
}
///
///
/// Used to determine whether the control should render its default action lists,
/// containing a DataSourceID dropdown and related tasks.
///
protected override bool UseDataSourcePickerActionList {
get {
return false;
}
}
internal void ConnectToDataSourceAction() {
InvokeTransactedChange(Component, new TransactedChangeCallback(ConnectToDataSourceCallback), null, SR.GetString(SR.ListControlDesigner_ConnectToDataSource));
}
private bool ConnectToDataSourceCallback(object context) {
ListControlConnectToDataSourceDialog dialog = new ListControlConnectToDataSourceDialog(this);
DialogResult result = UIServiceHelper.ShowDialog(Component.Site, dialog);
return (result == DialogResult.OK);
}
///
///
/// DataBinds the given control to get design time rendering
///
protected override void DataBind(BaseDataBoundControl dataBoundControl) {
// We don't need to databind here because we just added items to the items collection
return;
}
///
/// Starts collection editor for List Items
///
internal void EditItems() {
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(Component)["Items"];
Debug.Assert(descriptor != null, "Expected to find Items property on ListControl");
InvokeTransactedChange(Component, new TransactedChangeCallback(EditItemsCallback), descriptor, SR.GetString(SR.ListControlDesigner_EditItems), descriptor);
}
///
/// Transacted callback to invoke the Edit Items dialog.
///
private bool EditItemsCallback(object context) {
IDesignerHost designerHost = (IDesignerHost)GetService(typeof(IDesignerHost));
Debug.Assert(designerHost != null);
PropertyDescriptor descriptor = (PropertyDescriptor)context;
ListItemsCollectionEditor editor = new ListItemsCollectionEditor(typeof(ListItemCollection));
editor.EditValue(new TypeDescriptorContext(designerHost, descriptor, Component),
new WindowsFormsEditorServiceHelper(this), descriptor.GetValue(Component));
return true;
}
///
///
/// Gets the HTML to be used for the design time representation of the control runtime.
///
public override string GetDesignTimeHtml() {
try {
ListControl listControl = (ListControl)ViewControl;
ListItemCollection items = listControl.Items;
bool isDataBound = IsDataBound();
if (items.Count == 0 || isDataBound) {
if (isDataBound) {
items.Clear();
items.Add(SR.GetString(SR.Sample_Databound_Text));
}
else {
items.Add(SR.GetString(SR.Sample_Unbound_Text));
}
}
return base.GetDesignTimeHtml();
}
catch (Exception e) {
return GetErrorDesignTimeHtml(e);
}
}
///
///
public IEnumerable GetResolvedSelectedDataSource() {
return ((IDataSourceProvider)this).GetResolvedSelectedDataSource();
}
///
///
public object GetSelectedDataSource() {
return ((IDataSourceProvider)this).GetSelectedDataSource();
}
///
///
///
/// Initializes the component for design.
///
///
public override void Initialize(IComponent component) {
VerifyInitializeArgument(component, typeof(ListControl));
base.Initialize(component);
}
///
///
/// Return true if the control is databound.
///
private bool IsDataBound() {
DataBinding dataSourceBinding = DataBindings["DataSource"];
return (dataSourceBinding != null || DataSourceID.Length > 0);
}
///
///
/// This method is called when the data source the control is
/// connected to changes. Override this method to perform any
/// additional actions that your designer requires. Make sure to call
/// the base implementation as well.
/// This method exists because it shipped in V1. Removing it creates a breaking change.
/// Then call the base class' implementation.
///
public virtual void OnDataSourceChanged() {
// Call the base protected implementation to inherit the default behavior
// of BaseDataBoundControlDesigner.
base.OnDataSourceChanged(true);
}
///
/// Called by data bound control designers to raise the data source
/// changed event so that listeners can be notified.
///
protected override void OnDataSourceChanged(bool forceUpdateView) {
// Call the public OnDataSourceChanged method without parameters introduced in this class,
// which exists for back-compat. This method is new in V2.
// Derived classes overrode OnDataSourceChanged(), so make sure that gets called.
this.OnDataSourceChanged();
}
///
///
///
/// Filters the properties to replace the runtime DataSource property
/// descriptor with the designer's.
///
///
protected override void PreFilterProperties(IDictionary properties) {
base.PreFilterProperties(properties);
PropertyDescriptor prop;
Attribute[] fieldPropAttrs = new Attribute[] {
new TypeConverterAttribute(typeof(DataFieldConverter))
};
prop = (PropertyDescriptor)properties["DataTextField"];
Debug.Assert(prop != null);
prop = TypeDescriptor.CreateProperty(this.GetType(), prop, fieldPropAttrs);
properties["DataTextField"] = prop;
prop = (PropertyDescriptor)properties["DataValueField"];
Debug.Assert(prop != null);
prop = TypeDescriptor.CreateProperty(this.GetType(), prop, fieldPropAttrs);
properties["DataValueField"] = prop;
}
}
}
// 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
- SqlClientWrapperSmiStream.cs
- AttributeTable.cs
- DbInsertCommandTree.cs
- StyleSheetDesigner.cs
- AnimatedTypeHelpers.cs
- CodeFieldReferenceExpression.cs
- DiffuseMaterial.cs
- FontFamilyValueSerializer.cs
- XmlSchemaValidator.cs
- FrameworkTemplate.cs
- HttpBindingExtension.cs
- RemotingHelper.cs
- PartialArray.cs
- RectangleHotSpot.cs
- NavigationPropertyEmitter.cs
- EdmProviderManifest.cs
- ExtensionQuery.cs
- diagnosticsswitches.cs
- LinqDataSourceInsertEventArgs.cs
- ViewSimplifier.cs
- InvalidOleVariantTypeException.cs
- BitHelper.cs
- StylusButtonEventArgs.cs
- SHA1Cng.cs
- IntegerCollectionEditor.cs
- TextDocumentView.cs
- XmlSchemaAnnotation.cs
- UInt64Storage.cs
- PathFigureCollection.cs
- SHA256Managed.cs
- StructureChangedEventArgs.cs
- DataControlLinkButton.cs
- AutomationEvent.cs
- TargetInvocationException.cs
- Expression.DebuggerProxy.cs
- CryptoKeySecurity.cs
- HttpVersion.cs
- TimersDescriptionAttribute.cs
- TypeElement.cs
- ResourceContainerWrapper.cs
- HtmlInputImage.cs
- PerformanceCounterPermissionEntry.cs
- TextRunProperties.cs
- ServerValidateEventArgs.cs
- FixedSOMElement.cs
- NetMsmqBinding.cs
- FormattedTextSymbols.cs
- TextInfo.cs
- EntryWrittenEventArgs.cs
- InternalTypeHelper.cs
- BidOverLoads.cs
- XmlDataFileEditor.cs
- Constants.cs
- FieldAccessException.cs
- Input.cs
- CachedTypeface.cs
- DebuggerAttributes.cs
- MethodBuilder.cs
- DataControlReference.cs
- XmlRawWriterWrapper.cs
- WebProxyScriptElement.cs
- SqlStream.cs
- InvalidOleVariantTypeException.cs
- CollectionChangedEventManager.cs
- InvalidDataException.cs
- FormsAuthenticationCredentials.cs
- UnsafeNativeMethods.cs
- ControllableStoryboardAction.cs
- CompilerScope.cs
- TdsParserSafeHandles.cs
- PropertyContainer.cs
- DataBoundControlDesigner.cs
- MergeLocalizationDirectives.cs
- BaseTemplateCodeDomTreeGenerator.cs
- DataGridViewTopRowAccessibleObject.cs
- _ShellExpression.cs
- TypeDescriptor.cs
- ControlCollection.cs
- SmtpSpecifiedPickupDirectoryElement.cs
- rsa.cs
- MonthChangedEventArgs.cs
- PersonalizationDictionary.cs
- Int16.cs
- MsmqBindingElementBase.cs
- MenuAdapter.cs
- MarshalByValueComponent.cs
- ImageClickEventArgs.cs
- IdentityValidationException.cs
- LassoSelectionBehavior.cs
- XAMLParseException.cs
- GenericEnumerator.cs
- AggregateException.cs
- PreviewPrintController.cs
- DispatcherSynchronizationContext.cs
- DynamicValidatorEventArgs.cs
- BinaryConverter.cs
- BooleanExpr.cs
- UseManagedPresentationBindingElementImporter.cs
- CryptoApi.cs
- CustomAttribute.cs