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
{
///
/// Implements designer support for CslaDataSource.
///
public class CslaDataSourceDesigner : DataSourceDesigner
{
private DataSourceControl _control = null;
private CslaDesignerDataSourceView _view = null;
///
/// Initialize the designer component.
///
/// The CslaDataSource control to
/// be designed.
public override void Initialize(IComponent component)
{
base.Initialize(component);
_control = (DataSourceControl)component;
}
internal System.ComponentModel.ISite Site
{
get
{
return _control.Site;
}
}
///
/// Returns the default view for this designer.
///
/// Ignored
///
///
/// This designer supports only a "Default" view.
///
public override DesignerDataSourceView GetView(string viewName)
{
if (_view == null)
{
_view = new CslaDesignerDataSourceView(this, "Default");
}
return _view;
}
///
/// Return a list of available views.
///
///
/// This designer supports only a "Default" view.
///
public override string[] GetViewNames()
{
return new string[] { "Default" };
}
///
/// Refreshes the schema for the data.
///
///
///
public override void RefreshSchema(bool preferSilent)
{
this.OnSchemaRefreshed(EventArgs.Empty);
}
///
/// Get a value indicating whether the control can
/// refresh its schema.
///
public override bool CanRefreshSchema
{
get
{
return true;
}
}
///
/// Invoke the design time configuration
/// support provided by the control.
///
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;
}
///
/// Get a value indicating whether this control
/// supports design time configuration.
///
public override bool CanConfigure
{
get
{
return true;
}
}
///
/// Get a value indicating whether the control can
/// be resized.
///
public override bool AllowResize
{
get
{
return false;
}
}
///
/// Get a reference to the CslaDataSource control being
/// designed.
///
internal CslaDataSource DataSourceControl
{
get
{
return (CslaDataSource)_control;
}
}
}
}