182 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Data;
 | 
						|
using System.Web.UI;
 | 
						|
using System.Web.UI.Design;
 | 
						|
using System.ComponentModel;
 | 
						|
using System.Reflection;
 | 
						|
using System.Collections;
 | 
						|
using System.Collections.Generic;
 | 
						|
 | 
						|
namespace Csla.Web.Design
 | 
						|
{
 | 
						|
  /// <summary>
 | 
						|
  /// Contains schema information for a single
 | 
						|
  /// object property.
 | 
						|
  /// </summary>
 | 
						|
  [Serializable]
 | 
						|
  public class ObjectFieldInfo : IDataSourceFieldSchema
 | 
						|
  {
 | 
						|
    private Type _dataType;
 | 
						|
    private bool _primaryKey;
 | 
						|
    private bool _isIdentity;
 | 
						|
    private bool _isNullable;
 | 
						|
    private int _length;
 | 
						|
    private bool _isReadOnly;
 | 
						|
    private string _name;
 | 
						|
    private bool _nullable;
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Creates an instance of the object.
 | 
						|
    /// </summary>
 | 
						|
    /// <param name="field">The PropertyInfo object
 | 
						|
    /// describing the property.</param>
 | 
						|
    public ObjectFieldInfo(PropertyDescriptor field)
 | 
						|
    {
 | 
						|
      DataObjectFieldAttribute attribute =
 | 
						|
        (DataObjectFieldAttribute)
 | 
						|
        field.Attributes[typeof(DataObjectFieldAttribute)];
 | 
						|
      if (attribute != null)
 | 
						|
      {
 | 
						|
        _primaryKey = attribute.PrimaryKey;
 | 
						|
        _isIdentity = attribute.IsIdentity;
 | 
						|
        _isNullable = attribute.IsNullable;
 | 
						|
        _length = attribute.Length;
 | 
						|
      }
 | 
						|
      _dataType = Utilities.GetPropertyType(
 | 
						|
          field.PropertyType);
 | 
						|
      _isReadOnly = field.IsReadOnly;
 | 
						|
      _name = field.Name;
 | 
						|
 | 
						|
      // nullable
 | 
						|
      Type t = field.PropertyType;
 | 
						|
      if (!t.IsValueType || _isNullable)
 | 
						|
        _nullable = true;
 | 
						|
      else
 | 
						|
      {
 | 
						|
        if (t.IsGenericType)
 | 
						|
          _nullable = (t.GetGenericTypeDefinition() == typeof(Nullable<>));
 | 
						|
        else
 | 
						|
          _nullable = false;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets the data type of the property.
 | 
						|
    /// </summary>
 | 
						|
    public Type DataType
 | 
						|
    {
 | 
						|
      get
 | 
						|
      {
 | 
						|
        return _dataType;
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets a value indicating whether this property
 | 
						|
    /// is an identity key for the object.
 | 
						|
    /// </summary>
 | 
						|
    /// <remarks>
 | 
						|
    /// Returns the optional value provided through
 | 
						|
    /// the <see cref="DataObjectFieldAttribute">DataObjectField</see>
 | 
						|
    /// attribute on the property.
 | 
						|
    /// </remarks>
 | 
						|
    public bool Identity
 | 
						|
    {
 | 
						|
      get { return _isIdentity; }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets a value indicating whether this property
 | 
						|
    /// is readonly.
 | 
						|
    /// </summary>
 | 
						|
    public bool IsReadOnly
 | 
						|
    {
 | 
						|
      get { return _isReadOnly; }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets a value indicating whether this property
 | 
						|
    /// must contain a unique value.
 | 
						|
    /// </summary>
 | 
						|
    /// <returns>
 | 
						|
    /// Always returns True if the property
 | 
						|
    /// is marked as a primary key, otherwise
 | 
						|
    /// returns False.
 | 
						|
    /// </returns>
 | 
						|
    public bool IsUnique
 | 
						|
    {
 | 
						|
      get { return _primaryKey; }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets the length of the property value.
 | 
						|
    /// </summary>
 | 
						|
    /// <remarks>
 | 
						|
    /// Returns the optional value provided through
 | 
						|
    /// the <see cref="DataObjectFieldAttribute">DataObjectField</see>
 | 
						|
    /// attribute on the property.
 | 
						|
    /// </remarks>
 | 
						|
    public int Length
 | 
						|
    {
 | 
						|
      get { return _length; }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets the property name.
 | 
						|
    /// </summary>
 | 
						|
    public string Name
 | 
						|
    {
 | 
						|
      get { return _name; }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets a value indicating whether the property
 | 
						|
    /// is nullable
 | 
						|
    /// </summary>
 | 
						|
    /// <remarks>
 | 
						|
    /// Returns True for reference types, and for
 | 
						|
    /// value types wrapped in the Nullable generic.
 | 
						|
    /// The result can also be set to True through
 | 
						|
    /// the <see cref="DataObjectFieldAttribute">DataObjectField</see>
 | 
						|
    /// attribute on the property.
 | 
						|
    /// </remarks>
 | 
						|
    public bool Nullable
 | 
						|
    {
 | 
						|
      get
 | 
						|
      { return _nullable; }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets the property's numeric precision.
 | 
						|
    /// </summary>
 | 
						|
    /// <returns>Always returns -1.</returns>
 | 
						|
    public int Precision
 | 
						|
    {
 | 
						|
      get { return -1; }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets a value indicating whether the property
 | 
						|
    /// is a primary key value.
 | 
						|
    /// </summary>
 | 
						|
    /// <remarks>
 | 
						|
    /// Returns the optional value provided through
 | 
						|
    /// the <see cref="DataObjectFieldAttribute">DataObjectField</see>
 | 
						|
    /// attribute on the property.
 | 
						|
    /// </remarks>
 | 
						|
    public bool PrimaryKey
 | 
						|
    {
 | 
						|
      get { return _primaryKey; }
 | 
						|
    }
 | 
						|
 | 
						|
    /// <summary>
 | 
						|
    /// Gets the property's scale.
 | 
						|
    /// </summary>
 | 
						|
    /// <returns>Always returns -1.</returns>
 | 
						|
    public int Scale
 | 
						|
    {
 | 
						|
      get { return -1; }
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |