104 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			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";
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| } |