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