230 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			230 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections;
 | |
| using System.Web.UI;
 | |
| using System.Web.UI.Design;
 | |
| using System.ComponentModel;
 | |
| using System.ComponentModel.Design;
 | |
| using System.Reflection;
 | |
| using System.Data;
 | |
| 
 | |
| namespace Csla.Web.Design
 | |
| {
 | |
|   /// <summary>
 | |
|   /// Object responsible for providing details about
 | |
|   /// data binding to a specific CSLA .NET object.
 | |
|   /// </summary>
 | |
|   public class CslaDesignerDataSourceView : DesignerDataSourceView
 | |
|   {
 | |
| 
 | |
|     private CslaDataSourceDesigner _owner = null;
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Creates an instance of the object.
 | |
|     /// </summary>
 | |
|     public CslaDesignerDataSourceView(CslaDataSourceDesigner owner, string viewName)
 | |
|       : base(owner, viewName)
 | |
|     {
 | |
|       _owner = owner;
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns a set of sample data used to populate
 | |
|     /// controls at design time.
 | |
|     /// </summary>
 | |
|     /// <param name="minimumRows">Minimum number of sample rows
 | |
|     /// to create.</param>
 | |
|     /// <param name="isSampleData">Returns True if the data
 | |
|     /// is sample data.</param>
 | |
|     public override IEnumerable GetDesignTimeData(int minimumRows, out bool isSampleData)
 | |
|     {
 | |
|       IDataSourceViewSchema schema = this.Schema;
 | |
|       DataTable result = new DataTable();
 | |
| 
 | |
|       // create the columns
 | |
|       foreach (IDataSourceFieldSchema item in schema.GetFields())
 | |
|       {
 | |
|         result.Columns.Add(item.Name, item.DataType);
 | |
|       }
 | |
| 
 | |
|       // create sample data
 | |
|       for (int index = 1; index <= minimumRows; index++)
 | |
|       {
 | |
|         object[] values = new object[result.Columns.Count];
 | |
|         int colIndex = 0;
 | |
|         foreach (DataColumn col in result.Columns)
 | |
|         {
 | |
|           if (col.DataType.Equals(typeof(string)))
 | |
|             values[colIndex] = "abc";
 | |
|           else if (col.DataType.Equals(typeof(System.DateTime)))
 | |
|             values[colIndex] = System.DateTime.Today.ToShortDateString();
 | |
|           else if (col.DataType.Equals(typeof(bool)))
 | |
|             values[colIndex] = false;
 | |
|           else if (col.DataType.IsPrimitive)
 | |
|             values[colIndex] = index;
 | |
|           else if (col.DataType.Equals(typeof(Guid)))
 | |
|             values[colIndex] = Guid.Empty;
 | |
|           else if (col.DataType.IsValueType)
 | |
|             values[colIndex] = Activator.CreateInstance(col.DataType);
 | |
|           else
 | |
|             values[colIndex] = null;
 | |
|           colIndex += 1;
 | |
|         }
 | |
|         result.LoadDataRow(values, LoadOption.OverwriteChanges);
 | |
|       }
 | |
| 
 | |
|       isSampleData = true;
 | |
|       return (IEnumerable)result.DefaultView;
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Returns schema information corresponding to the properties
 | |
|     /// of the CSLA .NET business object.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// All public properties are returned except for those marked
 | |
|     /// with the <see cref="BrowsableAttribute">Browsable attribute</see>
 | |
|     /// as False.
 | |
|     /// </remarks>
 | |
|     public override IDataSourceViewSchema Schema
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         return new ObjectSchema(
 | |
|           _owner, 
 | |
|           _owner.DataSourceControl.TypeName).GetViews()[0];
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Get a value indicating whether data binding can retrieve
 | |
|     /// the total number of rows of data.
 | |
|     /// </summary>
 | |
|     public override bool CanRetrieveTotalRowCount
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         return true;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     private Type GetObjectType()
 | |
|     {
 | |
|       Type result;
 | |
|       try
 | |
|       {
 | |
|         ITypeResolutionService typeService = null;
 | |
|         typeService = (ITypeResolutionService)(_owner.Site.GetService(typeof(ITypeResolutionService)));
 | |
|         result = typeService.GetType(this._owner.DataSourceControl.TypeName, true, false);
 | |
|       }
 | |
|       catch
 | |
|       {
 | |
|         result = typeof(object);
 | |
|       }
 | |
|       return result;
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Get a value indicating whether data binding can directly
 | |
|     /// delete the object.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// If this returns true, the web page must handle the
 | |
|     /// <see cref="CslaDataSource.DeleteObject">DeleteObject</see>
 | |
|     /// event.
 | |
|     /// </remarks>
 | |
|     public override bool CanDelete
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         Type objectType = GetObjectType();
 | |
|         if (typeof(Csla.Core.IUndoableObject).IsAssignableFrom(objectType))
 | |
|         {
 | |
|           return true;
 | |
|         }
 | |
|         else if (objectType.GetMethod("Remove") != null)
 | |
|         {
 | |
|           return true;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|           return false;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Get a value indicating whether data binding can directly
 | |
|     /// insert an instance of the object.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// If this returns true, the web page must handle the
 | |
|     /// <see cref="CslaDataSource.InsertObject">InsertObject</see>
 | |
|     /// event.
 | |
|     /// </remarks>
 | |
|     public override bool CanInsert
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         Type objectType = GetObjectType();
 | |
|         if (typeof(Csla.Core.IUndoableObject).IsAssignableFrom(objectType))
 | |
|         {
 | |
|           return true;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|           return false;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Get a value indicating whether data binding can directly
 | |
|     /// update or edit the object.
 | |
|     /// </summary>
 | |
|     /// <remarks>
 | |
|     /// If this returns true, the web page must handle the
 | |
|     /// <see cref="CslaDataSource.UpdateObject">UpdateObject</see>
 | |
|     /// event.
 | |
|     /// </remarks>
 | |
|     public override bool CanUpdate
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         Type objectType = GetObjectType();
 | |
|         if (typeof(Csla.Core.IUndoableObject).IsAssignableFrom(objectType))
 | |
|         {
 | |
|           return true;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|           return false;
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a value indicating whether the data source supports
 | |
|     /// paging.
 | |
|     /// </summary>
 | |
|     public override bool CanPage
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         return _owner.DataSourceControl.TypeSupportsPaging;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     /// <summary>
 | |
|     /// Gets a value indicating whether the data source supports
 | |
|     /// sorting.
 | |
|     /// </summary>
 | |
|     public override bool CanSort
 | |
|     {
 | |
|       get
 | |
|       {
 | |
|         return _owner.DataSourceControl.TypeSupportsSorting;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 |