211 lines
6.5 KiB
C#
211 lines
6.5 KiB
C#
using System;
|
|
using System.Web.UI;
|
|
using System.Web.UI.Design;
|
|
using System.ComponentModel;
|
|
using System.Reflection;
|
|
using Csla.Properties;
|
|
|
|
namespace Csla.Web
|
|
{
|
|
|
|
/// <summary>
|
|
/// A Web Forms data binding control designed to support
|
|
/// CSLA .NET business objects as data sources.
|
|
/// </summary>
|
|
[Designer(typeof(Csla.Web.Design.CslaDataSourceDesigner))]
|
|
[DisplayName("CslaDataSource")]
|
|
[Description("CSLA .NET Data Source Control")]
|
|
[ToolboxData("<{0}:CslaDataSource runat=\"server\"></{0}:CslaDataSource>")]
|
|
public class CslaDataSource : DataSourceControl
|
|
{
|
|
|
|
private CslaDataSourceView _defaultView;
|
|
|
|
/// <summary>
|
|
/// Event raised when an object is to be created and
|
|
/// populated with data.
|
|
/// </summary>
|
|
/// <remarks>Handle this event in a page and set
|
|
/// e.BusinessObject to the populated business object.
|
|
/// </remarks>
|
|
public event EventHandler<SelectObjectArgs> SelectObject;
|
|
|
|
/// <summary>
|
|
/// Event raised when an object is to be populated with data
|
|
/// and inserted.
|
|
/// </summary>
|
|
/// <remarks>Handle this event in a page to create an
|
|
/// instance of the object, load the object with data and
|
|
/// insert the object into the database.</remarks>
|
|
public event EventHandler<InsertObjectArgs> InsertObject;
|
|
|
|
/// <summary>
|
|
/// Event raised when an object is to be updated.
|
|
/// </summary>
|
|
/// <remarks>Handle this event in a page to update an
|
|
/// existing instance of an object with new data and then
|
|
/// save the object into the database.</remarks>
|
|
public event EventHandler<UpdateObjectArgs> UpdateObject;
|
|
|
|
/// <summary>
|
|
/// Event raised when an object is to be deleted.
|
|
/// </summary>
|
|
/// <remarks>Handle this event in a page to delete
|
|
/// an object from the database.</remarks>
|
|
public event EventHandler<DeleteObjectArgs> DeleteObject;
|
|
|
|
/// <summary>
|
|
/// Returns the default view for this data control.
|
|
/// </summary>
|
|
/// <param name="viewName">Ignored.</param>
|
|
/// <returns></returns>
|
|
/// <remarks>This control only contains a "Default" view.</remarks>
|
|
protected override DataSourceView GetView(string viewName)
|
|
{
|
|
if (_defaultView == null)
|
|
_defaultView = new CslaDataSourceView(this, "Default");
|
|
return _defaultView;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get or set the name of the assembly (no longer used).
|
|
/// </summary>
|
|
/// <value>Obsolete - do not use.</value>
|
|
public string TypeAssemblyName
|
|
{
|
|
get { return ((CslaDataSourceView)this.GetView("Default")).TypeAssemblyName; }
|
|
set { ((CslaDataSourceView)this.GetView("Default")).TypeAssemblyName = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get or set the full type name of the business object
|
|
/// class to be used as a data source.
|
|
/// </summary>
|
|
/// <value>Full type name of the business class,
|
|
/// including assembly name.</value>
|
|
public string TypeName
|
|
{
|
|
get { return ((CslaDataSourceView)this.GetView("Default")).TypeName; }
|
|
set { ((CslaDataSourceView)this.GetView("Default")).TypeName = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get or set a value indicating whether the
|
|
/// business object data source supports paging.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// To support paging, the business object
|
|
/// (collection) must implement
|
|
/// <see cref="Csla.Core.IReportTotalRowCount"/>.
|
|
/// </remarks>
|
|
public bool TypeSupportsPaging
|
|
{
|
|
get { return ((CslaDataSourceView)this.GetView("Default")).TypeSupportsPaging; }
|
|
set { ((CslaDataSourceView)this.GetView("Default")).TypeSupportsPaging = value; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get or set a value indicating whether the
|
|
/// business object data source supports sorting.
|
|
/// </summary>
|
|
public bool TypeSupportsSorting
|
|
{
|
|
get { return ((CslaDataSourceView)this.GetView("Default")).TypeSupportsSorting; }
|
|
set { ((CslaDataSourceView)this.GetView("Default")).TypeSupportsSorting = value; }
|
|
}
|
|
|
|
private static System.Collections.Generic.Dictionary<string,Type> _typeCache =
|
|
new System.Collections.Generic.Dictionary<string,Type>();
|
|
|
|
/// <summary>
|
|
/// Returns a <see cref="Type">Type</see> object based on the
|
|
/// assembly and type information provided.
|
|
/// </summary>
|
|
/// <param name="typeAssemblyName">Optional assembly name.</param>
|
|
/// <param name="typeName">Full type name of the class,
|
|
/// including assembly name.</param>
|
|
/// <remarks></remarks>
|
|
internal static Type GetType(
|
|
string typeAssemblyName, string typeName)
|
|
{
|
|
Type result = null;
|
|
if (!string.IsNullOrEmpty(typeAssemblyName))
|
|
{
|
|
// explicit assembly name provided
|
|
result = Type.GetType(string.Format(
|
|
"{0}, {1}", typeName, typeAssemblyName), true, true);
|
|
}
|
|
else if (typeName.IndexOf(",") > 0)
|
|
{
|
|
// assembly qualified type name provided
|
|
result = Type.GetType(typeName, true, true);
|
|
}
|
|
else
|
|
{
|
|
// no assembly name provided
|
|
result = _typeCache[typeName];
|
|
if (result == null)
|
|
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
|
|
{
|
|
result = asm.GetType(typeName, false, true);
|
|
if (result != null)
|
|
{
|
|
_typeCache.Add(typeName, result);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (result == null)
|
|
throw new TypeLoadException(String.Format(Resources.TypeLoadException, typeName));
|
|
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Returns a list of views available for this control.
|
|
/// </summary>
|
|
/// <remarks>This control only provides the "Default" view.</remarks>
|
|
protected override System.Collections.ICollection GetViewNames()
|
|
{
|
|
return new string[] { "Default" };
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the SelectObject event.
|
|
/// </summary>
|
|
internal void OnSelectObject(SelectObjectArgs e)
|
|
{
|
|
if (SelectObject != null)
|
|
SelectObject(this, e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the InsertObject event.
|
|
/// </summary>
|
|
internal void OnInsertObject(InsertObjectArgs e)
|
|
{
|
|
if (InsertObject != null)
|
|
InsertObject(this, e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the UpdateObject event.
|
|
/// </summary>
|
|
internal void OnUpdateObject(UpdateObjectArgs e)
|
|
{
|
|
if (UpdateObject != null)
|
|
UpdateObject(this, e);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Raises the DeleteObject event.
|
|
/// </summary>
|
|
internal void OnDeleteObject(DeleteObjectArgs e)
|
|
{
|
|
if (DeleteObject != null)
|
|
DeleteObject(this, e);
|
|
}
|
|
}
|
|
}
|