165 lines
4.1 KiB
C#

using System;
using System.Web.UI;
using System.Web.UI.Design;
using System.ComponentModel;
using System.Windows.Forms.Design;
using Csla.Web;
namespace Csla.Web.Design
{
/// <summary>
/// Implements designer support for CslaDataSource.
/// </summary>
public class CslaDataSourceDesigner : DataSourceDesigner
{
private DataSourceControl _control = null;
private CslaDesignerDataSourceView _view = null;
/// <summary>
/// Initialize the designer component.
/// </summary>
/// <param name="component">The CslaDataSource control to
/// be designed.</param>
public override void Initialize(IComponent component)
{
base.Initialize(component);
_control = (DataSourceControl)component;
}
internal System.ComponentModel.ISite Site
{
get
{
return _control.Site;
}
}
/// <summary>
/// Returns the default view for this designer.
/// </summary>
/// <param name="viewName">Ignored</param>
/// <returns></returns>
/// <remarks>
/// This designer supports only a "Default" view.
/// </remarks>
public override DesignerDataSourceView GetView(string viewName)
{
if (_view == null)
{
_view = new CslaDesignerDataSourceView(this, "Default");
}
return _view;
}
/// <summary>
/// Return a list of available views.
/// </summary>
/// <remarks>
/// This designer supports only a "Default" view.
/// </remarks>
public override string[] GetViewNames()
{
return new string[] { "Default" };
}
/// <summary>
/// Refreshes the schema for the data.
/// </summary>
/// <param name="preferSilent"></param>
/// <remarks></remarks>
public override void RefreshSchema(bool preferSilent)
{
this.OnSchemaRefreshed(EventArgs.Empty);
}
/// <summary>
/// Get a value indicating whether the control can
/// refresh its schema.
/// </summary>
public override bool CanRefreshSchema
{
get
{
return true;
}
}
/// <summary>
/// Invoke the design time configuration
/// support provided by the control.
/// </summary>
public override void Configure()
{
InvokeTransactedChange(_control, ConfigureCallback, null, "ConfigureDataSource");
}
private bool ConfigureCallback(object context)
{
bool result = false;
string oldTypeName;
if (string.IsNullOrEmpty(((CslaDataSource)DataSourceControl).TypeAssemblyName))
oldTypeName = ((CslaDataSource)DataSourceControl).TypeName;
else
oldTypeName = string.Format("{0}, {1}",
((CslaDataSource)DataSourceControl).TypeName, ((CslaDataSource)DataSourceControl).TypeAssemblyName);
IUIService uiService = (IUIService)_control.Site.GetService(typeof(IUIService));
CslaDataSourceConfiguration cfg = new CslaDataSourceConfiguration(_control, oldTypeName);
if (uiService.ShowDialog(cfg) == System.Windows.Forms.DialogResult.OK)
{
SuppressDataSourceEvents();
try
{
((CslaDataSource)DataSourceControl).TypeAssemblyName = string.Empty;
((CslaDataSource)DataSourceControl).TypeName = cfg.TypeName;
OnDataSourceChanged(EventArgs.Empty);
result = true;
}
finally
{
ResumeDataSourceEvents();
}
}
cfg.Dispose();
return result;
}
/// <summary>
/// Get a value indicating whether this control
/// supports design time configuration.
/// </summary>
public override bool CanConfigure
{
get
{
return true;
}
}
/// <summary>
/// Get a value indicating whether the control can
/// be resized.
/// </summary>
public override bool AllowResize
{
get
{
return false;
}
}
/// <summary>
/// Get a reference to the CslaDataSource control being
/// designed.
/// </summary>
internal CslaDataSource DataSourceControl
{
get
{
return (CslaDataSource)_control;
}
}
}
}