104 lines
2.8 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.Design;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Reflection;
using Csla;
using Csla.Web.Design;
namespace Csla.Web.Design
{
/// <summary>
/// Object providing schema information for a
/// business object.
/// </summary>
[Serializable()]
public class ObjectViewSchema : IDataSourceViewSchema
{
private string _typeName = "";
private CslaDataSourceDesigner _designer;
/// <summary>
/// Create an instance of the object.
/// </summary>
/// <param name="site">Site containing the control.</param>
/// <param name="typeName">The business class for
/// which to generate the schema.</param>
public ObjectViewSchema(CslaDataSourceDesigner site, string typeName)
{
_typeName = typeName;
_designer = site;
}
/// <summary>
/// Returns a list of child schemas belonging to the
/// object.
/// </summary>
/// <remarks>This schema object only returns
/// schema for the object itself, so GetChildren will
/// always return Nothing (null in C#).</remarks>
public System.Web.UI.Design.IDataSourceViewSchema[] GetChildren()
{
return null;
}
/// <summary>
/// Returns schema information for each property on
/// the object.
/// </summary>
/// <remarks>All public properties on the object
/// will be reflected in this schema list except
/// for those properties where the
/// <see cref="BrowsableAttribute">Browsable</see> attribute
/// is False.
/// </remarks>
public System.Web.UI.Design.IDataSourceFieldSchema[] GetFields()
{
ITypeResolutionService typeService = null;
List<ObjectFieldInfo> result = new List<ObjectFieldInfo>();
if (_designer != null)
{
Type objectType = null;
try
{
typeService = (ITypeResolutionService)(_designer.Site.GetService(typeof(ITypeResolutionService)));
objectType = typeService.GetType(_typeName, true, false);
if (typeof(IEnumerable).IsAssignableFrom(objectType))
{
// this is a list so get the item type
objectType = Utilities.GetChildItemType(objectType);
}
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(objectType);
foreach (PropertyDescriptor item in props)
{
if (item.IsBrowsable)
{
result.Add(new ObjectFieldInfo(item));
}
}
}
catch
{ /* do nothing - just swallow exception */ }
}
return result.ToArray();
}
/// <summary>
/// Returns the name of the schema.
/// </summary>
public string Name
{
get
{
return "Default";
}
}
}
}