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);
 | |
|     }
 | |
|   }
 | |
| }
 |