The purpose of this upgrade is to improve the user experience when using the Admin tool to Update ROs. Currently for larger RO dbs (like Barakah) we can run up against memory constraints that do not allow all the ROs to be updated at one time. This is based upon some initial resource where some places were identified where we could improve memory usage. Some of these should benefit PROMS as a whole while others will be specific to the RO Update option in Admin Tools.
586 lines
23 KiB
C#
586 lines
23 KiB
C#
// ========================================================================
|
|
// Copyright 2007 - Volian Enterprises, Inc. All rights reserved.
|
|
// Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
|
// ------------------------------------------------------------------------
|
|
// $Workfile: $ $Revision: $
|
|
// $Author: $ $Date: $
|
|
//
|
|
// $History: $
|
|
// ========================================================================
|
|
|
|
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using Csla;
|
|
using Csla.Data;
|
|
using System.Configuration;
|
|
using System.IO;
|
|
using System.ComponentModel;
|
|
using System.Collections.Generic;
|
|
namespace VEPROMS.CSLA.Library
|
|
{
|
|
public delegate void FormatInfoEvent(object sender);
|
|
/// <summary>
|
|
/// FormatInfo Generated by MyGeneration using the CSLA Object Mapping template
|
|
/// </summary>
|
|
[Serializable()]
|
|
[TypeConverter(typeof(FormatInfoConverter))]
|
|
public partial class FormatInfo : ReadOnlyBase<FormatInfo>, IDisposable
|
|
{
|
|
public event FormatInfoEvent Changed;
|
|
private void OnChange()
|
|
{
|
|
if (Changed != null) Changed(this);
|
|
}
|
|
#region Log4Net
|
|
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
#endregion
|
|
#region Collection
|
|
private static List<FormatInfo> _CacheList = new List<FormatInfo>();
|
|
protected static void AddToCache(FormatInfo formatInfo)
|
|
{
|
|
if (!_CacheList.Contains(formatInfo)) _CacheList.Add(formatInfo); // In AddToCache
|
|
}
|
|
protected static void RemoveFromCache(FormatInfo formatInfo)
|
|
{
|
|
while (_CacheList.Contains(formatInfo)) _CacheList.Remove(formatInfo); // In RemoveFromCache
|
|
}
|
|
private static Dictionary<string, List<FormatInfo>> _CacheByPrimaryKey = new Dictionary<string, List<FormatInfo>>();
|
|
private static void ConvertListToDictionary()
|
|
{
|
|
while (_CacheList.Count > 0) // Move FormatInfo(s) from temporary _CacheList to _CacheByPrimaryKey
|
|
{
|
|
FormatInfo tmp = _CacheList[0]; // Get the first FormatInfo
|
|
string pKey = tmp.FormatID.ToString();
|
|
if (!_CacheByPrimaryKey.ContainsKey(pKey))
|
|
{
|
|
_CacheByPrimaryKey[pKey] = new List<FormatInfo>(); // Add new list for PrimaryKey
|
|
}
|
|
_CacheByPrimaryKey[pKey].Add(tmp); // Add to Primary Key list
|
|
_CacheList.RemoveAt(0); // Remove the first FormatInfo
|
|
}
|
|
}
|
|
internal static void AddList(FormatInfoList lst)
|
|
{
|
|
foreach (FormatInfo item in lst) AddToCache(item);
|
|
}
|
|
protected static FormatInfo GetCachedByPrimaryKey(int formatID)
|
|
{
|
|
ConvertListToDictionary();
|
|
string key = formatID.ToString();
|
|
if (_CacheByPrimaryKey.ContainsKey(key)) return _CacheByPrimaryKey[key][0];
|
|
return null;
|
|
}
|
|
#endregion
|
|
#region Business Methods
|
|
private string _ErrorMessage = string.Empty;
|
|
public string ErrorMessage
|
|
{
|
|
get { return _ErrorMessage; }
|
|
}
|
|
protected Format _Editable;
|
|
private IVEHasBrokenRules HasBrokenRules
|
|
{
|
|
get
|
|
{
|
|
IVEHasBrokenRules hasBrokenRules = null;
|
|
if (_Editable != null)
|
|
hasBrokenRules = _Editable.HasBrokenRules;
|
|
return hasBrokenRules;
|
|
}
|
|
}
|
|
private int _FormatID;
|
|
[System.ComponentModel.DataObjectField(true, true)]
|
|
public int FormatID
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
return _FormatID;
|
|
}
|
|
}
|
|
private int _ParentID;
|
|
public int ParentID
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_MyParent != null) _ParentID = _MyParent.FormatID;
|
|
return _ParentID;
|
|
}
|
|
}
|
|
private FormatInfo _MyParent;
|
|
public FormatInfo MyParent
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_MyParent == null && _ParentID != _FormatID) _MyParent = FormatInfo.Get(_ParentID);
|
|
return _MyParent;
|
|
}
|
|
}
|
|
private string _Name = string.Empty;
|
|
public string Name
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
return _Name;
|
|
}
|
|
}
|
|
private string _Description = string.Empty;
|
|
public string Description
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
return _Description;
|
|
}
|
|
}
|
|
private string _Data = string.Empty;
|
|
public string Data
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
return _Data;
|
|
}
|
|
}
|
|
private string _Config = string.Empty;
|
|
public string Config
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
return _Config;
|
|
}
|
|
}
|
|
private string _GenMac = string.Empty;
|
|
public string GenMac
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
return _GenMac;
|
|
}
|
|
}
|
|
private DateTime _DTS = new DateTime();
|
|
public DateTime DTS
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
return _DTS;
|
|
}
|
|
}
|
|
private string _UserID = string.Empty;
|
|
public string UserID
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
return _UserID;
|
|
}
|
|
}
|
|
private int _ApplicablePlant = 0;
|
|
public int ApplicablePlant
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
return _ApplicablePlant;
|
|
}
|
|
}
|
|
private int _FormatContentCount = 0;
|
|
/// <summary>
|
|
/// Count of FormatContents for this Format
|
|
/// </summary>
|
|
public int FormatContentCount
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_FormatContentCount < 0)
|
|
_FormatContentCount = FormatContents.Count;
|
|
return _FormatContentCount;
|
|
}
|
|
}
|
|
private ContentInfoList _FormatContents = null;
|
|
[TypeConverter(typeof(ContentInfoListConverter))]
|
|
public ContentInfoList FormatContents
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_FormatContentCount < 0 || (_FormatContentCount > 0 && _FormatContents == null))
|
|
_FormatContents = ContentInfoList.GetByFormatID(_FormatID);
|
|
if (_FormatContentCount < 0)
|
|
_FormatContentCount = _FormatContents.Count;
|
|
return _FormatContents;
|
|
}
|
|
}
|
|
public void RefreshFormatContents()
|
|
{
|
|
_FormatContentCount = -1;
|
|
ConvertListToDictionary();
|
|
if (_CacheByPrimaryKey.ContainsKey(_FormatID.ToString()))
|
|
foreach (FormatInfo tmp in _CacheByPrimaryKey[_FormatID.ToString()])
|
|
tmp._FormatContentCount = -1; // This will cause the data to be requeried
|
|
}
|
|
private int _FormatDocVersionCount = 0;
|
|
/// <summary>
|
|
/// Count of FormatDocVersions for this Format
|
|
/// </summary>
|
|
public int FormatDocVersionCount
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_FormatDocVersionCount < 0)
|
|
_FormatDocVersionCount = FormatDocVersions.Count;
|
|
return _FormatDocVersionCount;
|
|
}
|
|
}
|
|
private DocVersionInfoList _FormatDocVersions = null;
|
|
[TypeConverter(typeof(DocVersionInfoListConverter))]
|
|
public DocVersionInfoList FormatDocVersions
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_FormatDocVersionCount < 0 || (_FormatDocVersionCount > 0 && _FormatDocVersions == null))
|
|
_FormatDocVersions = DocVersionInfoList.GetByFormatID(_FormatID);
|
|
if (_FormatDocVersionCount < 0)
|
|
_FormatDocVersionCount = _FormatDocVersions.Count;
|
|
return _FormatDocVersions;
|
|
}
|
|
}
|
|
public void RefreshFormatDocVersions()
|
|
{
|
|
_FormatDocVersionCount = -1;
|
|
ConvertListToDictionary();
|
|
if (_CacheByPrimaryKey.ContainsKey(_FormatID.ToString()))
|
|
foreach (FormatInfo tmp in _CacheByPrimaryKey[_FormatID.ToString()])
|
|
tmp._FormatDocVersionCount = -1; // This will cause the data to be requeried
|
|
}
|
|
private int _FormatFolderCount = 0;
|
|
/// <summary>
|
|
/// Count of FormatFolders for this Format
|
|
/// </summary>
|
|
public int FormatFolderCount
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_FormatFolderCount < 0)
|
|
_FormatFolderCount = FormatFolders.Count;
|
|
return _FormatFolderCount;
|
|
}
|
|
}
|
|
private FolderInfoList _FormatFolders = null;
|
|
[TypeConverter(typeof(FolderInfoListConverter))]
|
|
public FolderInfoList FormatFolders
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_FormatFolderCount < 0 || (_FormatFolderCount > 0 && _FormatFolders == null))
|
|
_FormatFolders = FolderInfoList.GetByFormatID(_FormatID);
|
|
if (_FormatFolderCount < 0)
|
|
_FormatFolderCount = _FormatFolders.Count;
|
|
return _FormatFolders;
|
|
}
|
|
}
|
|
public void RefreshFormatFolders()
|
|
{
|
|
_FormatFolderCount = -1;
|
|
ConvertListToDictionary();
|
|
if (_CacheByPrimaryKey.ContainsKey(_FormatID.ToString()))
|
|
foreach (FormatInfo tmp in _CacheByPrimaryKey[_FormatID.ToString()])
|
|
tmp._FormatFolderCount = -1; // This will cause the data to be requeried
|
|
}
|
|
private int _ChildFormatCount = 0;
|
|
/// <summary>
|
|
/// Count of ChildFormats for this Format
|
|
/// </summary>
|
|
public int ChildFormatCount
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_ChildFormatCount < 0)
|
|
_ChildFormatCount = ChildFormats.Count;
|
|
return _ChildFormatCount;
|
|
}
|
|
}
|
|
private FormatInfoList _ChildFormats = null;
|
|
[TypeConverter(typeof(FormatInfoListConverter))]
|
|
public FormatInfoList ChildFormats
|
|
{
|
|
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.NoInlining)]
|
|
get
|
|
{
|
|
if (_ChildFormatCount < 0 || (_ChildFormatCount > 0 && _ChildFormats == null))
|
|
_ChildFormats = FormatInfoList.GetChildren(_FormatID);
|
|
if (_ChildFormatCount < 0)
|
|
_ChildFormatCount = _ChildFormats.Count;
|
|
return _ChildFormats;
|
|
}
|
|
}
|
|
public void RefreshChildFormats()
|
|
{
|
|
_ChildFormatCount = -1;
|
|
ConvertListToDictionary();
|
|
if (_CacheByPrimaryKey.ContainsKey(_FormatID.ToString()))
|
|
foreach (FormatInfo tmp in _CacheByPrimaryKey[_FormatID.ToString()])
|
|
tmp._ChildFormatCount = -1; // This will cause the data to be requeried
|
|
}
|
|
// CSLATODO: Replace base FormatInfo.ToString function as necessary
|
|
/// <summary>
|
|
/// Overrides Base ToString
|
|
/// </summary>
|
|
/// <returns>A string representation of current FormatInfo</returns>
|
|
//public override string ToString()
|
|
//{
|
|
// return base.ToString();
|
|
//}
|
|
// CSLATODO: Check FormatInfo.GetIdValue to assure that the ID returned is unique
|
|
/// <summary>
|
|
/// Overrides Base GetIdValue - Used internally by CSLA to determine equality
|
|
/// </summary>
|
|
/// <returns>A Unique ID for the current FormatInfo</returns>
|
|
protected override object GetIdValue()
|
|
{
|
|
return MyFormatInfoUnique; // Absolutely Unique ID
|
|
}
|
|
#endregion
|
|
#region Factory Methods
|
|
private static int _FormatInfoUnique = 0;
|
|
private static int FormatInfoUnique
|
|
{ get { return ++_FormatInfoUnique; } }
|
|
private int _MyFormatInfoUnique = FormatInfoUnique;
|
|
public int MyFormatInfoUnique // Absolutely Unique ID - Info
|
|
{ get { return _MyFormatInfoUnique; } }
|
|
protected FormatInfo()
|
|
{/* require use of factory methods */
|
|
AddToCache(this);
|
|
}
|
|
private bool _Disposed = false;
|
|
private static int _CountCreated = 0;
|
|
private static int _CountDisposed = 0;
|
|
private static int _CountFinalized = 0;
|
|
private static int IncrementCountCreated
|
|
{ get { return ++_CountCreated; } }
|
|
private int _CountWhenCreated = IncrementCountCreated;
|
|
public static int CountCreated
|
|
{ get { return _CountCreated; } }
|
|
public static int CountNotDisposed
|
|
{ get { return _CountCreated - _CountDisposed; } }
|
|
public static int CountNotFinalized
|
|
{ get { return _CountCreated - _CountFinalized; } }
|
|
~FormatInfo()
|
|
{
|
|
_CountFinalized++;
|
|
}
|
|
public void Dispose()
|
|
{
|
|
if (_Disposed) return;
|
|
_CountDisposed++;
|
|
_Disposed = true;
|
|
RemoveFromCache(this);
|
|
if (!_CacheByPrimaryKey.ContainsKey(FormatID.ToString())) return;
|
|
List<FormatInfo> listFormatInfo = _CacheByPrimaryKey[FormatID.ToString()]; // Get the list of items
|
|
while (listFormatInfo.Contains(this)) listFormatInfo.Remove(this); // Remove the item from the list
|
|
if (listFormatInfo.Count == 0) // If there are no items left in the list
|
|
_CacheByPrimaryKey.Remove(FormatID.ToString()); // remove the list
|
|
}
|
|
public virtual Format Get()
|
|
{
|
|
return _Editable = Format.Get(_FormatID);
|
|
}
|
|
public static void Refresh(Format tmp)
|
|
{
|
|
string key = tmp.FormatID.ToString();
|
|
ConvertListToDictionary();
|
|
if (_CacheByPrimaryKey.ContainsKey(key))
|
|
foreach (FormatInfo tmpInfo in _CacheByPrimaryKey[key])
|
|
tmpInfo.RefreshFields(tmp);
|
|
}
|
|
protected virtual void RefreshFields(Format tmp)
|
|
{
|
|
if (_ParentID != tmp.ParentID)
|
|
{
|
|
if (MyParent != null) MyParent.RefreshChildFormats(); // Update List for old value
|
|
_ParentID = tmp.ParentID; // Update the value
|
|
}
|
|
_MyParent = null; // Reset list so that the next line gets a new list
|
|
if (MyParent != null) MyParent.RefreshChildFormats(); // Update List for new value
|
|
_Name = tmp.Name;
|
|
_Description = tmp.Description;
|
|
_Data = tmp.Data;
|
|
_Config = tmp.Config;
|
|
_GenMac = tmp.GenMac;
|
|
_DTS = tmp.DTS;
|
|
_UserID = tmp.UserID;
|
|
_FormatInfoExtension.Refresh(this);
|
|
OnChange();// raise an event
|
|
}
|
|
public static FormatInfo Get(int formatID)
|
|
{
|
|
//if (!CanGetObject())
|
|
// throw new System.Security.SecurityException("User not authorized to view a Format");
|
|
try
|
|
{
|
|
FormatInfo tmp = GetCachedByPrimaryKey(formatID);
|
|
if (tmp == null)
|
|
{
|
|
tmp = DataPortal.Fetch<FormatInfo>(new PKCriteria(formatID));
|
|
AddToCache(tmp);
|
|
}
|
|
if (tmp.ErrorMessage == "No Record Found")
|
|
{
|
|
tmp.Dispose(); // Clean-up FormatInfo
|
|
tmp = null;
|
|
}
|
|
return tmp;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new DbCslaException("Error on FormatInfo.Get", ex);
|
|
}
|
|
}
|
|
#endregion
|
|
#region Data Access Portal
|
|
internal FormatInfo(SafeDataReader dr)
|
|
{
|
|
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] FormatInfo.Constructor", GetHashCode());
|
|
try
|
|
{
|
|
ReadData(dr);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (_MyLog.IsErrorEnabled) _MyLog.Error("FormatInfo.Constructor", ex);
|
|
throw new DbCslaException("FormatInfo.Constructor", ex);
|
|
}
|
|
}
|
|
[Serializable()]
|
|
protected class PKCriteria
|
|
{
|
|
private int _FormatID;
|
|
public int FormatID
|
|
{ get { return _FormatID; } }
|
|
public PKCriteria(int formatID)
|
|
{
|
|
_FormatID = formatID;
|
|
}
|
|
}
|
|
public static string _Failed = null;
|
|
public static string Failed
|
|
{
|
|
get { return FormatInfo._Failed; }
|
|
set { FormatInfo._Failed = value; }
|
|
}
|
|
private void ReadData(SafeDataReader dr)
|
|
{
|
|
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] FormatInfo.ReadData", GetHashCode());
|
|
try
|
|
{
|
|
_FormatID = dr.GetInt32("FormatID");
|
|
_ParentID = dr.GetInt32("ParentID");
|
|
_Name = dr.GetString("Name");
|
|
_Description = dr.GetString("Description");
|
|
_Data = dr.GetString("Data");
|
|
try // B2019-107 Added Error Handling for missing Config field
|
|
{
|
|
_Config = dr.GetString("Config");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (Failed == null)
|
|
{
|
|
Failed = string.Format("\r\n*** PromsFixes.SQL may not be up to date - {0} - {1}", ex.GetType().Name, ex.Message);
|
|
}
|
|
}
|
|
_GenMac = dr.GetString("GenMac");
|
|
_DTS = dr.GetDateTime("DTS");
|
|
_UserID = dr.GetString("UserID");
|
|
_FormatContentCount = dr.GetInt32("ContentCount");
|
|
_FormatDocVersionCount = dr.GetInt32("DocVersionCount");
|
|
_FormatFolderCount = dr.GetInt32("FolderCount");
|
|
_ChildFormatCount = dr.GetInt32("ChildCount");
|
|
_ApplicablePlant = dr.GetInt32("ApplicablePlant");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (_MyLog.IsErrorEnabled) _MyLog.Error("FormatInfo.ReadData", ex);
|
|
_ErrorMessage = ex.Message;
|
|
throw new DbCslaException("FormatInfo.ReadData", ex);
|
|
}
|
|
}
|
|
private void DataPortal_Fetch(PKCriteria criteria)
|
|
{
|
|
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] FormatInfo.DataPortal_Fetch", GetHashCode());
|
|
try
|
|
{
|
|
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
|
{
|
|
ApplicationContext.LocalContext["cn"] = cn;
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "getJustFormat";
|
|
cm.Parameters.AddWithValue("@FormatID", criteria.FormatID);
|
|
cm.CommandTimeout = Database.DefaultTimeout;
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
{
|
|
if (!dr.Read())
|
|
{
|
|
_ErrorMessage = "No Record Found";
|
|
return;
|
|
}
|
|
ReadData(dr);
|
|
}
|
|
}
|
|
// removing of item only needed for local data portal
|
|
if (ApplicationContext.ExecutionLocation == ApplicationContext.ExecutionLocations.Client)
|
|
ApplicationContext.LocalContext.Remove("cn");
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (_MyLog.IsErrorEnabled) _MyLog.Error("FormatInfo.DataPortal_Fetch", ex);
|
|
_ErrorMessage = ex.Message;
|
|
throw new DbCslaException("FormatInfo.DataPortal_Fetch", ex);
|
|
}
|
|
}
|
|
#endregion
|
|
// Standard Refresh
|
|
#region extension
|
|
FormatInfoExtension _FormatInfoExtension = new FormatInfoExtension();
|
|
[Serializable()]
|
|
partial class FormatInfoExtension : extensionBase { }
|
|
[Serializable()]
|
|
class extensionBase
|
|
{
|
|
// Default Refresh
|
|
public virtual void Refresh(FormatInfo tmp) { }
|
|
}
|
|
#endregion
|
|
} // Class
|
|
#region Converter
|
|
internal class FormatInfoConverter : ExpandableObjectConverter
|
|
{
|
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType)
|
|
{
|
|
if (destType == typeof(string) && value is FormatInfo)
|
|
{
|
|
// Return the ToString value
|
|
return ((FormatInfo)value).ToString();
|
|
}
|
|
return base.ConvertTo(context, culture, value, destType);
|
|
}
|
|
}
|
|
#endregion
|
|
} // Namespace
|