You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2331 lines
88 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections;
using System.Data;
using BP.DA;
using BP.Difference;
using BP.Sys;
namespace BP.En
{
/// <summary>
/// EnMap 的摘要说明。
/// </summary>
public class Map
{
#region MapExt 类似的UI 设置.
//public BP.En.FrmUI.Connections Connections = new FrmUI.Connections();
#endregion MapExt 类似的UI 设置.
#region 帮助.
/// <summary>
/// 是否是加密字段
/// </summary>
public bool IsJM = false;
/// <summary>
/// 增加帮助
/// </summary>
/// <param name="key">字段</param>
/// <param name="url"></param>
public void SetHelperUrl(string key, string url)
{
if (SystemConfig.IsDisHelp == true)
return;
Attr attr = this.GetAttrByKey(key);
attr.HelperUrl = url;
}
/// <summary>
/// 增加帮助
/// </summary>
/// <param name="key">字段</param>
public void SetHelperBaidu(string key)
{
if (SystemConfig.IsDisHelp == true)
return;
Attr attr = this.GetAttrByKey(key);
attr.HelperUrl = "http://www.baidu.com/s?word=ccflow " + attr.Desc;
}
/// <summary>
/// 增加帮助
/// </summary>
/// <param name="key">字段</param>
/// <param name="keyword">关键字</param>
public void SetHelperBaidu(string key, string keyword)
{
if (SystemConfig.IsDisHelp == true)
return;
Attr attr = this.GetAttrByKey(key);
attr.HelperUrl = "http://www.baidu.com/s?word=" + keyword;
}
/// <summary>
/// 增加帮助
/// </summary>
/// <param name="key">字段</param>
/// <param name="context">连接</param>
public void SetHelperAlert(string key, string context)
{
if (SystemConfig.IsDisHelp == true)
return;
context = context.Replace("@", "");
Attr attr = this.GetAttrByKey(key);
attr.HelperUrl = "javascript:alert('" + context + "')";
}
#endregion 帮助.
#region 关于缓存问题
public string _FK_MapData = null;
public string FK_MapData
{
get
{
if (_FK_MapData == null)
return this.PhysicsTable;
return _FK_MapData;
}
set
{
_FK_MapData = value;
}
}
/// <summary>
/// 存放位置
/// </summary>
private Depositary _DepositaryOfEntity = Depositary.None;
/// <summary>
/// 存放位置OfEntity
/// </summary>
public Depositary DepositaryOfEntity
{
get
{
return _DepositaryOfEntity;
}
set
{
_DepositaryOfEntity = value;
}
}
/// <summary>
///
/// </summary>
private Depositary _DepositaryOfMap = Depositary.Application;
/// <summary>
/// 存放位置
/// </summary>
public Depositary DepositaryOfMap
{
get
{
return _DepositaryOfMap;
}
set
{
_DepositaryOfMap = value;
}
}
#endregion
#region 查询属性处理
#region 非枚举值与外键条件查询
private SearchNormals _SearchNormals = null;
/// <summary>
/// 查找属性
/// </summary>
public SearchNormals SearchNormals
{
get
{
if (this._SearchNormals == null)
this._SearchNormals = new SearchNormals();
return this._SearchNormals;
}
}
/// <summary>
/// 得到全部的Attrs
/// </summary>
/// <returns></returns>
public Attrs GetChoseAttrs(Entity en)
{
return BP.Sys.CField.GetMyAttrs(en.GetNewEntities, en.EnMap);
}
public Attrs GetChoseAttrs(Entities ens)
{
return BP.Sys.CField.GetMyAttrs(ens, this);
}
#endregion
#region 关于枚举值与外键查找条件
/// <summary>
/// 查找的attrs
/// </summary>
private SearchFKEnums _SearchAttrs = null;
/// <summary>
/// 查找的attrs
/// </summary>
public SearchFKEnums SearchFKEnums
{
get
{
if (this._SearchAttrs == null)
this._SearchAttrs = new SearchFKEnums();
return this._SearchAttrs;
}
}
/// <summary>
/// 增加查询条件exp
/// </summary>
/// <param name="exp">表达式</param>
public void AddHidden(string exp)
{
SearchNormal aos = new SearchNormal("K" + this.SearchNormals.Count, exp, exp, "exp", exp, 0, true);
this.SearchNormals.Add(aos);
}
public void AddHidden(string refKey, string symbol, string val)
{
SearchNormal aos = new SearchNormal(refKey, refKey, refKey, symbol, val, 0, true);
this.SearchNormals.Add(aos);
}
/// <summary>
/// 加入查找属性.必须是外键盘/枚举类型/boolen.
/// </summary>
/// <param name="key">key</param>
/// application/json
/// requestbody
public void AddSearchAttr(string key, int width = 130)
{
Attr attr = this.GetAttrByKey(key);
if (attr.Key == "FK_Dept")
this.SearchFKEnums.Add(attr, false, null, width);
else
this.SearchFKEnums.Add(attr, true, null, width);
}
/// <summary>
/// 加入查找属性.必须是外键盘/枚举类型/boolen.
/// </summary>
/// <param name="key">键值</param>
/// <param name="isShowSelectedAll">是否显示全部</param>
/// <param name="relationalDtlKey">级联子菜单字段</param>
public void AddSearchAttr(string key, bool isShowSelectedAll, string relationalDtlKey)
{
Attr attr = this.GetAttrByKey(key);
this.SearchFKEnums.Add(attr, isShowSelectedAll, relationalDtlKey);
}
#endregion
#endregion
#region 公共方法
/// <summary>
/// 取得字段
/// </summary>
/// <param name="key">key</param>
/// <returns>field name </returns>
public string GetFieldByKey(string key)
{
return GetAttrByKey(key).Field;
}
/// <summary>
/// 取得描述
/// </summary>
/// <param name="key">key</param>
/// <returns>val</returns>
public string GetDescByKey(String key)
{
return GetAttrByKey(key).Desc;
}
/// <summary>
/// 通过一个key 得到它的属性值。
/// </summary>
/// <param name="key">key</param>
/// <returns>attr</returns>
public Attr GetAttrByKey(string key)
{
foreach (Attr attr in this.Attrs)
{
if (attr.Key.ToUpper() == key.ToUpper())
{
return attr;
}
}
if (key == null)
throw new Exception("@[" + this.EnDesc + "] 获取属性key 值不能为空.");
if (this.ToString().Contains("."))
throw new Exception("@[" + this.ToString() + "," + this.EnDesc + "," + this.PhysicsTable + "] 没有找到 key=[" + key + "]的属性请检查Map文件。此问题出错的原因之一是在设置系统中的一个实体的属性关联这个实体你在给实体设置信息时没有按照规则书写reftext, refvalue。请核实。");
else
{
throw new Exception("@[" + this.ToString() + "," + this.EnDesc + "," + this.PhysicsTable + "] 没有找到 key=[" + key + "]的属性请检查Sys_MapAttr表是否有该数据,用SQL执行: SELECT * FROM Sys_MapAttr WHERE FK_MapData='" + this.ToString() + "' AND KeyOfEn='" + key + "' 是否可以查询到数据,如果没有可能该字段属性丢失。");
}
}
/// <summary>
/// 获得属性.
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public Attr GetAttrByBindKey(string key)
{
foreach (Attr attr in this.Attrs)
{
if (attr.UIBindKey == key)
{
return attr;
}
}
if (key == null)
throw new Exception("@[" + this.EnDesc + "] 获取属性key 值不能为空.");
if (this.ToString().Contains("."))
throw new Exception("@[" + this.ToString() + "," + this.EnDesc + "," + this.ToString() + "] 没有找到 key=[" + key + "]的属性请检查Map文件。此问题出错的原因之一是在设置系统中的一个实体的属性关联这个实体你在给实体设置信息时没有按照规则书写reftext, refvalue。请核实。");
else
throw new Exception("@[" + this.ToString() + "," + this.EnDesc + "," + this.ToString() + "] 没有找到 key=[" + key + "]的属性请检查Sys_MapAttr表是否有该数据,用SQL执行: SELECT * FROM Sys_MapAttr WHERE FK_MapData='" + this.ToString() + "' AND KeyOfEn='" + key + "' 是否可以查询到数据,如果没有可能该字段属性丢失。");
}
/// <summary>
/// 通过一个key 得到它的属性值。
/// </summary>
/// <param name="key">key</param>
/// <returns>attr</returns>
public Attr GetAttrByDesc(string desc)
{
foreach (Attr attr in this.Attrs)
{
if (attr.Desc == desc)
{
return attr;
}
}
if (desc == null)
throw new Exception("@[" + this.ToString() + "," + this.EnDesc + "] 获取属性 desc 值不能为空.");
throw new Exception("@[" + this.ToString() + "," + this.EnDesc + "] 没有找到 desc=[" + desc + "]的属性请检查Map文件。此问题出错的原因之一是在设置系统中的一个实体的属性关联这个实体你在给实体设置信息时没有按照规则书写reftext, refvalue。请核实。");
}
#endregion
#region 计算属性
/// <summary>
/// 取道最大的TB宽度。
/// </summary>
private int _MaxTBLength = 0;
/// <summary>
/// 最大的TB宽度。
/// </summary>
public float MaxTBLength
{
get
{
if (_MaxTBLength == 0)
{
foreach (Attr attr in this.Attrs)
{
if (attr.UIWidth > _MaxTBLength)
{
_MaxTBLength = (int)attr.UIWidth;
}
}
}
return _MaxTBLength;
}
}
/// <summary>
/// 物理键盘集合
/// </summary>
private Attrs _HisPhysicsAttrs = null;
/// <summary>
/// 物理键盘集合
/// </summary>
public Attrs HisPhysicsAttrs
{
get
{
if (_HisPhysicsAttrs == null)
{
_HisPhysicsAttrs = new Attrs();
foreach (Attr attr in this.Attrs)
{
if (attr.MyFieldType == FieldType.NormalVirtual || attr.MyFieldType == FieldType.RefText)
continue;
_HisPhysicsAttrs.Add(attr, false, this.IsAddRefName);
}
}
return _HisPhysicsAttrs;
}
}
/// <summary>
/// 他的外键集合
/// </summary>
private Attrs _HisFKAttrs = null;
/// <summary>
/// 他的外键集合
/// </summary>
public Attrs HisFKAttrs
{
get
{
if (_HisFKAttrs == null)
{
_HisFKAttrs = new Attrs();
foreach (Attr attr in this.Attrs)
{
if (attr.MyFieldType == FieldType.FK
|| attr.MyFieldType == FieldType.PKFK)
{
_HisFKAttrs.Add(attr, false, false);
}
}
}
return _HisFKAttrs;
}
}
public BPEntityAthType HisBPEntityAthType = BPEntityAthType.None;
/// <summary>
/// 附件存储位置
/// </summary>
public string FJSavePath = null;
/// <summary>
/// 移动到显示方式
/// </summary>
public string TitleExt = null;
/// <summary>
/// 是否加入相关联的名称
/// AttrKey - AttrKeyName
/// </summary>
public bool IsAddRefName = false;
/// <summary>
/// 他的外键Enum集合
/// </summary>
private Attrs _HisEnumAttrs = null;
/// <summary>
/// 他的外键Enum集合
/// </summary>
public Attrs HisEnumAttrs
{
get
{
if (_HisEnumAttrs == null)
{
_HisEnumAttrs = new Attrs();
foreach (Attr attr in this.Attrs)
{
if (attr.MyFieldType == FieldType.Enum || attr.MyFieldType == FieldType.PKEnum)
{
_HisEnumAttrs.Add(attr, true, false);
}
}
}
return _HisEnumAttrs;
}
}
/// <summary>
/// 他的外键EnumandPk集合
/// </summary>
private Attrs _HisFKEnumAttrs = null;
/// <summary>
/// 他的外键EnumandPk集合
/// </summary>
public Attrs HisFKEnumAttrs
{
get
{
if (_HisFKEnumAttrs == null)
{
_HisFKEnumAttrs = new Attrs();
foreach (Attr attr in this.Attrs)
{
if (attr.MyFieldType == FieldType.Enum
|| attr.MyFieldType == FieldType.PKEnum
|| attr.MyFieldType == FieldType.FK
|| attr.MyFieldType == FieldType.PKFK)
{
_HisFKEnumAttrs.Add(attr);
}
}
}
return _HisFKEnumAttrs;
}
}
#endregion
#region 他的关连信息.
private Attrs _HisRefAttrs = null;
public Attrs HisRefAttrs
{
get
{
if (this._HisRefAttrs == null)
{
this._HisRefAttrs = new Attrs();
foreach (Attr attr in this.Attrs)
{
if (attr.MyFieldType == FieldType.FK || attr.MyFieldType == FieldType.PKFK)
{
_HisRefAttrs.Add(attr);
}
}
}
return _HisRefAttrs;
}
}
#endregion
#region 关于相关功能
/// <summary>
/// 增加
/// </summary>
/// <param name="func"></param>
public void AddRefMethod(RefMethod rm)
{
rm.GroupName = this.currGroupMethodName;
this.HisRefMethods.Add(rm);
}
#endregion
#region 关于他的明细信息
/// <summary>
/// 增加明细
/// </summary>
/// <param name="ens">子类</param>
/// <param name="refKey">关联的键值</param>
/// <param name="groupName">分组名字</param>
/// <param name="model">模式</param>
public void AddDtl(Entities ens, string refKey, string groupName = null, DtlEditerModel model = DtlEditerModel.DtlBatch, string icon = null)
{
EnDtl dtl = new EnDtl();
dtl.Ens = ens;
dtl.RefKey = refKey;
dtl.GroupName = this.currGroupMethodName;
dtl.DtlEditerModel = model;
dtl.Icon = icon;
this.Dtls.Add(dtl);
}
public void AddDtl(string url, string refKey, string groupName = null, DtlEditerModel model = DtlEditerModel.DtlBatch, string icon = null,string desc="")
{
EnDtl dtl = new EnDtl();
dtl.UrlExt = url;
dtl.RefKey = refKey;
dtl.GroupName = this.currGroupMethodName;
dtl.Desc = desc;
dtl.DtlEditerModel = model;
dtl.Icon = icon;
this.Dtls.Add(dtl);
}
/// <summary>
/// 相关功能s
/// </summary>
private RefMethods _RefMethods = null;
/// <summary>
/// 相关功能
/// </summary>
public RefMethods HisRefMethods
{
get
{
if (this._RefMethods == null)
_RefMethods = new RefMethods();
return _RefMethods;
}
set
{
_RefMethods = value;
}
}
/// <summary>
/// 明细s
/// </summary>
private EnDtls _Dtls = null;
/// <summary>
/// 他的明细
/// </summary>
public EnDtls Dtls
{
get
{
if (this._Dtls == null)
_Dtls = new EnDtls();
return _Dtls;
}
}
/// <summary>
/// 所有的明细
/// </summary>
private EnDtls _DtlsAll = null;
/// <summary>
/// 所有的明细
/// </summary>
public EnDtls DtlsAll
{
get
{
if (this._DtlsAll == null)
{
_DtlsAll = this.Dtls;
// 加入他的多选。
foreach (AttrOfOneVSM en in this.AttrsOfOneVSM)
{
EnDtl dtl = new EnDtl();
dtl.Ens = en.EnsOfMM;
dtl.RefKey = en.AttrOfOneInMM;
//dtl.Desc =en.Desc;
//dtl.Desc = en.Desc ;
_DtlsAll.Add(dtl);
}
}
return _DtlsAll;
}
}
#endregion
#region 构造涵数
/// <summary>
/// 构造涵数
/// </summary>
/// <param name="physicsTable">表</param>
/// <param name="enDesc">中文描述</param>
public Map(string physicsTable, string enDesc)
{
this.PhysicsTable = physicsTable;
this._EnDesc = enDesc;
}
/// <summary>
/// 构造涵数
/// </summary>
public Map() { }
#endregion
#region 属性
/// <summary>
/// 多对多的关联
/// </summary>
private AttrsOfOneVSM _AttrsOfOneVSM = new AttrsOfOneVSM();
/// <summary>
/// 点对多的关联
/// </summary>
public AttrsOfOneVSM AttrsOfOneVSM
{
get
{
if (this._AttrsOfOneVSM == null)
this._AttrsOfOneVSM = new AttrsOfOneVSM();
this._AttrsOfOneVSM.GroupName = this.currGroupMethodName;
return this._AttrsOfOneVSM;
}
set
{
this._AttrsOfOneVSM = value;
}
}
/// <summary>
/// 通过多实体的类名称取出他的OneVSM属性.
/// </summary>
/// <param name="ensOfMMclassName"></param>
/// <returns></returns>
public AttrOfOneVSM GetAttrOfOneVSM(string ensOfMMclassName)
{
foreach (AttrOfOneVSM attr in this.AttrsOfOneVSM)
{
if (attr.EnsOfMM.ToString() == ensOfMMclassName)
{
return attr;
}
}
throw new Exception("error param: " + ensOfMMclassName);
}
public string MoveTo = null;
/// <summary>
///
/// </summary>
public string IndexField = null;
/// <summary>
/// 属性字段
/// </summary>
public string ParaFields = null;
/// <summary>
/// 实体描述
/// </summary>
string _EnDesc = "";
public string EnDesc
{
get
{
return this._EnDesc;
}
set
{
this._EnDesc = value;
}
}
public void setEnDesc(string val)
{
this._EnDesc = val;
}
/// <summary>
/// 是否版本管理
/// </summary>
public bool IsEnableVer = false;
public bool IsShowSearchKey = true;
/// <summary>
/// 如果是null就按照通用的查询关键字.
/// 如果按照指定的格式查询按照如下格式配置.
/// @名称=No@名称=Name@件号=JianHao
/// </summary>
public string SearchFields = "";
/// <summary>
/// 查询的数值 @年龄=Age@薪水=XinShui
/// </summary>
public string SearchFieldsOfNum = "";
/// <summary>
/// 数值查询范围.
/// </summary>
public BP.Sys.DTSearchWay DTSearchWay = BP.Sys.DTSearchWay.None;
public string DTSearchLabel = "日期从";
public string DTSearchKey = "";
/// <summary>
/// 图片DefaultImageUrl
/// </summary>
public string Icon = "../Images/En/Default.gif";
/// <summary>
/// 实体类型
/// </summary>
EnType _EnType = EnType.App;
/// <summary>
/// 实体类型 默认为0(用户应用).
/// </summary>
public EnType EnType
{
get
{
return this._EnType;
}
set
{
this._EnType = value;
}
}
/// <summary>
/// 为方便java转换设置
/// </summary>
/// <param name="val"></param>
public void setEnType(EnType val)
{
this._EnType = val;
}
#region 生成属性根据xml.
private string PKs = "";
public void GenerMap(string xml)
{
DataSet ds = new DataSet("");
ds.ReadXml(xml);
foreach (DataTable dt in ds.Tables)
{
switch (dt.TableName)
{
case "Base":
this.DealDT_Base(dt);
break;
case "Attr":
this.DealDT_Attr(dt);
break;
case "SearchAttr":
this.DealDT_SearchAttr(dt);
break;
case "Dtl":
this.DealDT_SearchAttr(dt);
break;
case "Dot2Dot":
this.DealDT_Dot2Dot(dt);
break;
default:
throw new Exception("XML 配置信息错误,没有约定的标记:" + dt.TableName);
}
}
// 检查配置的完整性。
}
private void DealDT_Base(DataTable dt)
{
if (dt.Rows.Count != 1)
throw new Exception("基础信息配置错误不能多于或者少于1行记录。");
foreach (DataColumn dc in dt.Columns)
{
string val = dt.Rows[0][dc.ColumnName].ToString();
if (val == null)
continue;
if (dt.Rows[0][dc.ColumnName] == DBNull.Value)
continue;
switch (dc.ColumnName)
{
case "EnDesc":
this.setEnDesc(val);
break;
case "Table":
this.PhysicsTable = val;
break;
case "DBUrl":
this.EnDBUrl = new DBUrl(DataType.GetDBUrlByString(val));
break;
case "ICON":
this.Icon = val;
break;
case "CodeStruct":
this.CodeStruct = val;
break;
case "AdjunctType":
//this.PhysicsTable=val;
break;
case "EnType":
switch (val)
{
case "Admin":
this.setEnType(EnType.Admin);
break;
case "App":
this.setEnType(EnType.App);
break;
case "Dot2Dot":
this.setEnType(EnType.Dot2Dot);
break;
case "Dtl":
this.setEnType(EnType.Dtl);
break;
case "Etc":
this.setEnType(EnType.Etc);
break;
case "PowerAble":
this.setEnType(EnType.PowerAble);
break;
case "Sys":
this.setEnType(EnType.Sys);
break;
case "View":
this.setEnType(EnType.View);
break;
case "XML":
this.setEnType(EnType.XML);
break;
default:
throw new Exception("没有约定的标记:EnType = " + val);
}
break;
case "DepositaryOfEntity":
switch (val)
{
case "Application":
this.DepositaryOfEntity = Depositary.Application;
break;
case "None":
this.DepositaryOfEntity = Depositary.None;
break;
case "Session":
this.DepositaryOfEntity = Depositary.Application;
break;
default:
throw new Exception("没有约定的标记:DepositaryOfEntity=[" + val + "] 应该选择为,Application, None, Session ");
}
break;
case "DepositaryOfMap":
switch (val)
{
case "Application":
case "Session":
this.DepositaryOfMap = Depositary.Application;
break;
case "None":
this.DepositaryOfMap = Depositary.None;
break;
default:
throw new Exception("没有约定的标记:DepositaryOfMap=[" + val + "] 应该选择为,Application, None, Session ");
}
break;
case "PKs":
this.PKs = val;
break;
default:
throw new Exception("基础信息中没有约定的标记:" + val);
}
}
}
private void DealDT_Attr(DataTable dt)
{
foreach (DataRow dr in dt.Rows)
{
Attr attr = new Attr();
foreach (DataColumn dc in dt.Columns)
{
string val = dr[dc.ColumnName].ToString();
switch (dc.ColumnName)
{
case "Key":
attr.Key = val;
break;
case "Field":
attr.Field = val;
break;
case "DefVal":
attr.DefaultVal = val;
break;
case "DT":
attr.MyDataType = DataType.GetDataTypeByString(val);
break;
case "UIBindKey":
attr.UIBindKey = val;
break;
case "UIIsReadonly":
if (val == "1" || val.ToUpper() == "TRUE")
attr.UIIsReadonly = true;
else
attr.UIIsReadonly = false;
break;
case "MinLen":
attr.MinLength = int.Parse(val);
break;
case "MaxLen":
attr.MaxLength = int.Parse(val);
break;
case "TBLen":
attr.UIWidth = int.Parse(val);
break;
default:
throw new Exception("没有约定的标记:" + val);
}
}
// 判断属性.
if (attr.UIBindKey == null)
{
/* 说明没有设置外键或者枚举类型。*/
//if (attr.MyDataType
}
else
{
if (attr.UIBindKey.IndexOf(".") != -1)
{
/*说明它是一个类。*/
Entities ens = attr.HisFKEns;
EntitiesNoName ensNoName = ens as EntitiesNoName;
if (ensNoName == null)
{
/*没有转换成功的情况。*/
}
else
{
/*已经转换成功, 说明它是EntityNoName 类型。 */
if (this.PKs.IndexOf(attr.Key) != -1)
{
/* 如果是一个主键 */
if (attr.Field == "")
attr.Field = attr.Key;
this.AddDDLEntitiesPK(attr.Key, attr.Field, attr.DefaultVal.ToString(), attr.Desc, ensNoName, attr.UIIsReadonly);
}
else
{
this.AddDDLEntities(attr.Key, attr.Field, attr.DefaultVal.ToString(), attr.Desc, ensNoName, attr.UIIsReadonly);
}
}
}
else
{
}
}
}
}
private void DealDT_SearchAttr(DataTable dt)
{
}
private void DealDT_Dot2Dot(DataTable dt)
{
}
#endregion
#region 与生成No字串有关
/// <summary>
/// 编码结构
/// 例如: 0 2322;
/// </summary>
string _CodeStruct = "2";
/// <summary>
/// 编码的结构
/// </summary>
public string CodeStruct
{
get
{
return this._CodeStruct;
}
set
{
this._CodeStruct = value;
this._IsAutoGenerNo = true;
}
}
public void setCodeStruct(string val)
{
this._CodeStruct = val;
this._IsAutoGenerNo = true;
}
/// <summary>
/// 是否允许重复的名称(默认不允许重复。)
/// </summary>
private bool _IsAllowRepeatName = true;
/// <summary>
/// 是否允许重复的名称.
/// 在insertupdate 前检查。
/// </summary>
public bool IsAllowRepeatName
{
get
{
return _IsAllowRepeatName;
}
set
{
_IsAllowRepeatName = value;
}
}
/// <summary>
/// 是否自动编号
/// </summary>
private bool _IsAutoGenerNo = false;
/// <summary>
/// 是否自动编号.
/// </summary>
public bool IsAutoGenerNo
{
get
{
return _IsAutoGenerNo;
}
set
{
_IsAutoGenerNo = value;
}
}
public void setIsAutoGenerNo(bool val)
{
_IsAutoGenerNo = val;
}
#endregion
#region 与连接有关系。
DBUrl _EnDBUrl = null;
/// <summary>
/// 数据库连接
/// </summary>
public DBUrl EnDBUrl
{
get
{
if (this._EnDBUrl == null)
{
_EnDBUrl = new DBUrl();
}
return this._EnDBUrl;
}
set
{
this._EnDBUrl = value;
}
}
private string _PhysicsTable = null;
/// <summary>
/// 是否是视图
/// </summary>
public bool IsView
{
get
{
return DBAccess.IsView(this.PhysicsTableExt, this.EnDBUrl.DBType);
}
}
public string PhysicsTableExt
{
get
{
if (this.PhysicsTable.IndexOf(".") != -1)
{
string[] str = this.PhysicsTable.Split('.');
return str[1];
}
else
return this.PhysicsTable;
}
}
/// <summary>
/// 物理表名称
/// </summary>
/// <returns>Table name</returns>
public string PhysicsTable
{
get
{
return this._PhysicsTable;
}
set
{
// 因为组成的select 语句放入了内存,修改它的时间也要修改内存的数据。
//DA.Cash.AddObj(this.ToString()+"SQL",Depositary.Application,null);
DA.Cash.RemoveObj(this.ToString() + "SQL", Depositary.Application);
Cash.RemoveObj("MapOf" + this.ToString(), this.DepositaryOfMap); // RemoveObj
//DA.Cash.setObj(en.ToString()+"SQL",en.EnMap.DepositaryOfMap) as string;
this._PhysicsTable = value;
}
}
#endregion
private Attrs _attrs = null;
public Attrs Attrs
{
get
{
if (this._attrs == null)
this._attrs = new Attrs();
return this._attrs;
}
set
{
_attrs = value;
return;
if (this._attrs == null)
this._attrs = new En.Attrs();
Attrs myattrs = value;
foreach (Attr item in myattrs)
this._attrs.Add(item);
}
}
#endregion
#region 于属性相关的操作
#region DDL
#region 与boolen 有关系的操作.
public void AddBoolean(string key, bool defaultVal, string desc, bool isUIVisable, bool isUIEnable, bool isLine, string helpUrl)
{
AddBoolean(key, key, defaultVal, desc, isUIVisable, isUIEnable, isLine, null);
}
public void AddBoolean(string key, string field, bool defaultVal, string desc, bool isUIVisable, bool isUIEnable, bool isLine)
{
AddBoolean(key, field, defaultVal, desc, isUIVisable, isUIEnable, isLine, null);
}
/// <summary>
/// 增加与boolen 有关系的操作.
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field</param>
/// <param name="defaultVal">defaultVal</param>
/// <param name="desc">desc</param>
/// <param name="isUIEnable">isUIEnable</param>
/// <param name="isUIVisable">isUIVisable</param>
public void AddBoolean(string key, string field, bool defaultVal, string desc, bool isUIVisable, bool isUIEnable, bool isLine, string helpUrl)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.HelperUrl = helpUrl;
if (defaultVal)
attr.DefaultVal = 1;
else
attr.DefaultVal = 0;
attr.MyDataType = DataType.AppBoolean;
attr.Desc = desc;
attr.UIContralType = UIContralType.CheckBok;
attr.UIIsReadonly = !isUIEnable;
attr.UIVisible = isUIVisable;
attr.UIIsLine = isLine;
this.Attrs.Add(attr);
}
/// <summary>
/// 增加与boolen 有关系的操作.
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field</param>
/// <param name="defaultVal">defaultVal</param>
/// <param name="desc">desc</param>
/// <param name="isUIEnable">isUIEnable</param>
/// <param name="isUIVisable">isUIVisable</param>
public void AddBoolean(string key, bool defaultVal, string desc, bool isUIVisable, bool isUIEnable)
{
AddBoolean(key, key, defaultVal, desc, isUIVisable, isUIEnable, false);
}
/// <summary>
/// 增加与boolen 有关系的操作.
/// </summary>
/// <param name="key">key</param>
/// <param name="field">field</param>
/// <param name="defaultVal">defaultVal</param>
/// <param name="desc">desc</param>
/// <param name="isUIEnable">isUIEnable</param>
/// <param name="isUIVisable">isUIVisable</param>
public void AddBoolean(string key, bool defaultVal, string desc, bool isUIVisable, bool isUIEnable, bool isLine)
{
AddBoolean(key, key, defaultVal, desc, isUIVisable, isUIEnable, isLine);
}
#endregion
#region 于帮定自定义,枚举类型有关系的操作。
public void AddDDLSysEnumPK(string key, string field, int defaultVal, string desc, bool isUIVisable, bool isUIEnable, string sysEnumKey)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppInt;
attr.MyFieldType = FieldType.PKEnum;
attr.Desc = desc;
attr.UIContralType = UIContralType.DDL;
attr.UIBindKey = sysEnumKey;
attr.UIVisible = isUIVisable;
attr.UIIsReadonly = !isUIEnable;
this.Attrs.Add(attr);
}
public void AddDDLSysEnum(string key, string field, int defaultVal, string desc, bool isUIVisable, bool isUIEnable, string sysEnumKey, string cfgVal, bool isLine)
{
AddDDLSysEnum(key, field, defaultVal, desc, isUIVisable, isUIEnable, sysEnumKey, cfgVal, isLine, null);
}
/// <summary>
/// 自定义枚举类型
/// </summary>
/// <param name="key">键</param>
/// <param name="field">字段</param>
/// <param name="defaultVal">默认</param>
/// <param name="desc">描述</param>
/// <param name="sysEnumKey">Key</param>
public void AddDDLSysEnum(string key, string field, int defaultVal, string desc, bool isUIVisable, bool isUIEnable, string sysEnumKey, string cfgVal, bool isLine, string helpUrl)
{
Attr attr = new Attr();
attr.Key = key;
attr.HelperUrl = helpUrl;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppInt;
attr.MyFieldType = FieldType.Enum;
attr.Desc = desc;
attr.UIContralType = UIContralType.DDL;
attr.UIBindKey = sysEnumKey;
attr.UITag = cfgVal;
attr.UIVisible = isUIVisable;
attr.UIIsReadonly = !isUIEnable;
attr.UIIsLine = isLine;
this.Attrs.Add(attr);
}
/// <summary>
/// 自定义枚举类型
/// </summary>
/// <param name="key">键</param>
/// <param name="defaultVal">默认</param>
/// <param name="desc">描述</param>
/// <param name="sysEnumKey">Key</param>
public void AddDDLSysEnum(string key, int defaultVal, string desc, bool isUIVisable, bool isUIEnable, string sysEnumKey)
{
AddDDLSysEnum(key, key, defaultVal, desc, isUIVisable, isUIEnable, sysEnumKey, null, false);
}
public void AddDDLSysEnum(string key, int defaultVal, string desc, bool isUIVisable, bool isUIEnable, string sysEnumKey, string cfgVal, bool isLine)
{
AddDDLSysEnum(key, key, defaultVal, desc, isUIVisable, isUIEnable, sysEnumKey, cfgVal, isLine);
}
public void AddDDLSysEnum(string key, int defaultVal, string desc, bool isUIVisable, bool isUIEnable, string sysEnumKey, string cfgVal)
{
AddDDLSysEnum(key, key, defaultVal, desc, isUIVisable, isUIEnable, sysEnumKey, cfgVal, false);
}
public void AddDDLSysEnum(string key, int defaultVal, string desc, bool isUIVisable, bool isUIEnable)
{
AddDDLSysEnum(key, key, defaultVal, desc, isUIVisable, isUIEnable, key, null, false);
}
#endregion
#region 于帮定自定义,枚举类型有关系的操作。
/// <summary>
/// 自定义枚举类型
/// </summary>
/// <param name="key">键</param>
/// <param name="field">字段</param>
/// <param name="defaultVal">默认</param>
/// <param name="desc">描述</param>
/// <param name="sysEnumKey">Key</param>
/// <param name="cfgVals">配置的值,格式:@0=女@1=男</param>
public void AddRadioBtnSysEnum(string key, string field, int defaultVal, string desc, bool isUIVisable, bool isUIEnable, string sysEnumKey, string cfgVals = "")
{
if (field == null)
field = key;
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppInt;
attr.MyFieldType = FieldType.Enum;
attr.Desc = desc;
attr.UIContralType = UIContralType.RadioBtn;
attr.UIBindKey = sysEnumKey;
attr.UIVisible = isUIVisable;
attr.UIIsReadonly = !isUIEnable;
attr.UITag = cfgVals; //设置的值.
this.Attrs.Add(attr);
}
/// <summary>
/// 自定义枚举类型
/// </summary>
/// <param name="key">键</param>
/// <param name="defaultVal">默认</param>
/// <param name="desc">描述</param>
/// <param name="sysEnumKey">Key</param>
/// <param name="cfgVals">配置的值,格式:@0=女@1=男</param>
public void AddRadioBtnSysEnum(string key, int defaultVal, string desc, bool isUIVisable, bool isUIEnable, string sysEnumKey, string cfgVals)
{
AddDDLSysEnum(key, key, defaultVal, desc, isUIVisable, isUIEnable, sysEnumKey, cfgVals, false);
}
#endregion
#region DDLSQL
public void AddDDLSQL(string key, object defaultVal, string desc, string sql, bool uiIsEnable = true)
{
if (defaultVal == null)
defaultVal = "";
Attr attr = new Attr();
attr.Key = key;
attr.Field = key;
if (typeof(int) == defaultVal.GetType())
{
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppInt; ;
}
else
{
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
}
attr.MyFieldType = FieldType.Normal;
attr.MaxLength = 50;
attr.Desc = desc;
attr.UIContralType = UIContralType.DDL;
attr.UIBindKey = sql;
attr.HisFKEns = null;
attr.UIIsReadonly = !uiIsEnable;
this.Attrs.Add(attr);
//他的名称列.
attr = new Attr();
attr.Key = key + "Text";
attr.Field = key + "Text";
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
attr.MyFieldType = FieldType.Normal;
attr.MaxLength = 200; //最大长度 @李国文
attr.Desc = desc;
attr.UIContralType = UIContralType.TB;
// attr.UIBindKey = sql;
attr.UIIsReadonly = true;
attr.UIVisible = false;
this.Attrs.Add(attr);
}
#endregion DDLSQL
#region 与实体由关系的操作。
#region entityNoName
public void AddDDLEntities(string key, string defaultVal, string desc, EntitiesTree ens, bool uiIsEnable)
{
this.AddDDLEntities(key, key, defaultVal, DataType.AppString, desc, ens, "No", "Name", uiIsEnable);
}
public void AddDDLEntities(string key, string defaultVal, string desc, EntitiesNoName ens, bool uiIsEnable)
{
this.AddDDLEntities(key, key, defaultVal, DataType.AppString, desc, ens, "No", "Name", uiIsEnable);
}
public void AddDDLEntities(string key, string field, string defaultVal, string desc, EntitiesNoName ens, bool uiIsEnable)
{
this.AddDDLEntities(key, field, defaultVal, DataType.AppString, desc, ens, "No", "Name", uiIsEnable);
}
#endregion
#region EntitiesOIDName
public void AddDDLEntities(string key, int defaultVal, string desc, EntitiesOIDName ens, bool uiIsEnable)
{
this.AddDDLEntities(key, key, defaultVal, DataType.AppInt, desc, ens, "OID", "Name", uiIsEnable);
}
public void AddDDLEntities(string key, string field, object defaultVal, string desc, EntitiesOIDName ens, bool uiIsEnable)
{
this.AddDDLEntities(key, field, defaultVal, DataType.AppInt, desc, ens, "OID", "Name", uiIsEnable);
}
#endregion
/// <summary>
/// 于实体有关系的操作。
/// </summary>
/// <param name="key">健值</param>
/// <param name="field">字段</param>
/// <param name="defaultVal">默认值</param>
/// <param name="dataType">DataType类型</param>
/// <param name="desc">描述</param>
/// <param name="ens">实体集合</param>
/// <param name="refKey">关联的建</param>
/// <param name="refText">关联的Text</param>
private void AddDDLEntities(string key, string field, object defaultVal, int dataType, FieldType _fildType, string desc, Entities ens, string refKey, string refText, bool uiIsEnable)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = dataType;
attr.MyFieldType = _fildType;
attr.MaxLength = 50;
attr.Desc = desc;
attr.UIContralType = UIContralType.DDL;
attr.UIBindKey = ens.ToString();
// attr.UIBindKeyOfEn = ens.GetNewEntity.ToString();
attr.HisFKEns = ens;
attr.HisFKEns = ens;
attr.UIRefKeyText = refText;
attr.UIRefKeyValue = refKey;
attr.UIIsReadonly = uiIsEnable == true ? false : true;
this.Attrs.Add(attr, true, this.IsAddRefName);
}
public void AddDDLEntities(string key, string field, object defaultVal, int dataType, string desc, Entities ens, string refKey, string refText, bool uiIsEnable)
{
AddDDLEntities(key, field, defaultVal, dataType, FieldType.FK, desc, ens, refKey, refText, uiIsEnable);
}
/// <summary>
/// 于实体有关系的操作。字段与属性名称相同。
/// </summary>
/// <param name="key">健值</param>
/// <param name="field">字段</param>
/// <param name="defaultVal">默认值</param>
/// <param name="dataType">DataType类型</param>
/// <param name="desc">描述</param>
/// <param name="ens">实体集合</param>
/// <param name="refKey">关联的建</param>
/// <param name="refText">关联的Text</param>
public void AddDDLEntities(string key, object defaultVal, int dataType, string desc, Entities ens, string refKey, string refText, bool uiIsEnable)
{
AddDDLEntities(key, key, defaultVal, dataType, desc, ens, refKey, refText, uiIsEnable);
}
public void AddDDLEntitiesPK(string key, object defaultVal, int dataType, string desc, EntitiesTree ens, bool uiIsEnable)
{
AddDDLEntities(key, key, defaultVal, dataType, FieldType.PKFK, desc, ens, "No", "Name", uiIsEnable);
}
public void AddDDLEntitiesPK(string key, object defaultVal, int dataType, string desc, Entities ens, string refKey, string refText, bool uiIsEnable)
{
AddDDLEntities(key, key, defaultVal, dataType, FieldType.PKFK, desc, ens, refKey, refText, uiIsEnable);
}
public void AddDDLEntitiesPK(string key, string field, object defaultVal, int dataType, string desc, Entities ens, string refKey, string refText, bool uiIsEnable)
{
AddDDLEntities(key, field, defaultVal, dataType, FieldType.PKFK, desc, ens, refKey, refText, uiIsEnable);
}
#region 关于EntitiesNoName 有关系的操作。
/// <summary>
/// 关于EntitiesNoName 有关系的操作
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <param name="defaultVal"></param>
/// <param name="desc"></param>
/// <param name="ens"></param>
/// <param name="uiIsEnable"></param>
public void AddDDLEntitiesPK(string key, string field, string defaultVal, string desc, EntitiesTree ens, bool uiIsEnable)
{
AddDDLEntities(key, field, (object)defaultVal, DataType.AppString, FieldType.PKFK, desc, ens, "No", "Name", uiIsEnable);
}
public void AddDDLEntitiesPK(string key, string field, string defaultVal, string desc, EntitiesNoName ens, bool uiIsEnable)
{
AddDDLEntities(key, field, (object)defaultVal, DataType.AppString, FieldType.PKFK, desc, ens, "No", "Name", uiIsEnable);
}
public void AddDDLEntitiesPK(string key, string defaultVal, string desc, EntitiesNoName ens, bool uiIsEnable)
{
AddDDLEntitiesPK(key, key, defaultVal, desc, ens, uiIsEnable);
}
public void AddDDLEntitiesPK(string key, string defaultVal, string desc, EntitiesTree ens, bool uiIsEnable)
{
AddDDLEntitiesPK(key, key, defaultVal, desc, ens, uiIsEnable);
}
#endregion
#endregion
#endregion
#region TB
#region string 有关系的操作。
#region 关于
protected void AddTBString(string key, string field, object defaultVal, FieldType _FieldType, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith, bool isUILine)
{
AddTBString(key, field, defaultVal, _FieldType, desc, uiVisable, isReadonly, minLength, maxLength, tbWith, isUILine, null);
}
protected void AddTBString(string key, string field, object defaultVal, FieldType _FieldType, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith, bool isUILine, string helpUrl)
{
Attr attr = new Attr();
attr.Key = key;
attr.HelperUrl = helpUrl;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIWidth = tbWith;
attr.UIIsReadonly = isReadonly;
attr.MaxLength = maxLength;
attr.MinLength = minLength;
attr.MyFieldType = _FieldType;
attr.UIIsLine = isUILine;
this.Attrs.Add(attr);
}
#endregion
#region 公共的。
/// <summary>
/// 增加集合
/// </summary>
/// <param name="attrs">属性集合</param>
/// <param name="isClearGroupName">是否清除分组名称</param>
public void AddAttrs(Attrs attrs, bool isClearGroupName = false)
{
foreach (Attr attr in attrs)
{
if (attr.IsRefAttr)
continue;
this.Attrs.Add(attr, isClearGroupName);
}
}
public void AddAttr(Attr attr, bool isClearGroupName = false)
{
this.Attrs.Add(attr, isClearGroupName);
}
public void AddAttr(string key, object defaultVal, int dbtype, bool isPk, string desc)
{
if (isPk)
AddTBStringPK(key, key, desc, true, false, 0, 1000, 100);
else
AddTBString(key, key, defaultVal.ToString(), FieldType.Normal, desc, true, false, 0, 1000, 100, false);
}
/// <summary>
/// 增加一个textbox 类型的属性。
/// </summary>
/// <param name="key">健值</param>
/// <param name="field">字段值</param>
/// <param name="defaultVal">默认值</param>
/// <param name="_FieldType">字段类型</param>
/// <param name="desc">描述</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="uiVisable">是不是只读</param>
/// <param name="minLength">最小长度</param>
/// <param name="maxLength">最大长度</param>
/// <param name="tbWith">宽度</param>
public void AddTBString(string key, string defaultVal, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
AddTBString(key, key, defaultVal, FieldType.Normal, desc, uiVisable, isReadonly, minLength, maxLength, tbWith, false);
}
public void AddTBString(string key, string field, object defaultVal, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
AddTBString(key, field, defaultVal, FieldType.Normal, desc, uiVisable, isReadonly, minLength, maxLength, tbWith, false);
}
public void AddTBString(string key, string defaultVal, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith, bool isUILine)
{
AddTBString(key, key, defaultVal, FieldType.Normal, desc, uiVisable, isReadonly, minLength, maxLength, tbWith, isUILine);
}
public void AddTBString(string key, string defaultVal, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith, bool isUILine, string helpUrl)
{
AddTBString(key, key, defaultVal, FieldType.Normal, desc, uiVisable, isReadonly, minLength, maxLength, tbWith, isUILine, helpUrl);
}
/// <summary>
/// 附件集合
/// </summary>
public void AddMyFileS()
{
this.AddTBInt(EntityNoNameAttr.MyFileNum, 0, "附件", false, false);
this.HisBPEntityAthType = BPEntityAthType.Multi;
}
/// <summary>
/// 附件集合
/// </summary>
/// <param name="desc"></param>
public void AddMyFileS(string desc)
{
this.AddTBInt(EntityNoNameAttr.MyFileNum, 0, desc, false, false);
this.HisBPEntityAthType = BPEntityAthType.Multi;
}
/// <summary>
/// 增加一个附件
/// </summary>
/// <param name="fileDesc">附件描述</param>
/// <param name="ext">附件ID</param>
/// <param name="savePath">保存位置(默认为:\datauser\ensName\)</param>
public void AddMyFile(string fileDesc = null, string ext = null, string savePath = null)
{
if (fileDesc == null)
fileDesc = "附件或图片";
this.AddTBString(EntityNoNameAttr.MyFileName, null, fileDesc, false, false, 0, 300, 200);
this.AddTBString(EntityNoNameAttr.MyFilePath, null, "MyFilePath", false, false, 0, 300, 200);
this.AddTBString(EntityNoNameAttr.MyFileExt, null, "MyFileExt", false, false, 0, 20, 10);
this.AddTBString(EntityNoNameAttr.WebPath, null, "WebPath", false, false, 0, 300, 10);
this.AddTBInt(EntityNoNameAttr.MyFileH, 0, "MyFileH", false, false);
this.AddTBInt(EntityNoNameAttr.MyFileW, 0, "MyFileW", false, false);
this.AddTBFloat("MyFileSize", 0, "MyFileSize", false, false);
this.HisBPEntityAthType = BPEntityAthType.Single;
this.FJSavePath = savePath;
}
private AttrFiles _HisAttrFiles = null;
public AttrFiles HisAttrFiles
{
get
{
if (_HisAttrFiles == null)
_HisAttrFiles = new AttrFiles();
return _HisAttrFiles;
}
}
/// <summary>
/// 增加一个特定的附件,可以利用它增加多个?
/// 比如:增加简历,增加论文。
/// </summary>
/// <param name="fileDesc"></param>
/// <param name="fExt"></param>
public void AddMyFile(string fileDesc, string fExt)
{
HisAttrFiles.Add(fExt, fileDesc);
this.HisBPEntityAthType = BPEntityAthType.Single;
AddMyFile(fileDesc, fExt, null);
}
#region 字段分组方法.
public string currGroupAttrName = "基本信息";
public void AddGroupAttr(string groupName, string icon = "")
{
this.currGroupAttrName = groupName;
this.Attrs.currGroupAttrName = groupName;
}
#endregion 字段分组方法.
#region 方法分组.
public string currGroupMethodName = "基本信息";
public void AddGroupMethod(string groupName)
{
this.currGroupMethodName = groupName;
}
#endregion 方法分组.
#region 属性.
public void AddDDLStringEnum(string key, string defaultVal, string name, string cfgString, bool uiIsEnable, string helpDoc = "", bool isUILine = false)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = key;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
// 设置外部数据源类型字段.
attr.MyFieldType = FieldType.Normal;
attr.UIContralType = UIContralType.DDL;
attr.MaxLength = 50;
attr.MinLength = 0;
attr.Desc = name;
//转化为sql.
attr.UIBindKey = Glo.DealSQLStringEnumFormat(cfgString);
// alert(attr.UIBindKey);
attr.UIIsReadonly = !uiIsEnable;
attr.HelperUrl = helpDoc;
attr.UIIsLine = isUILine;
this.Attrs.Add(attr);
//他的名称列.
Attr attr2 = new Attr();
attr2.Key = key + 'T';
attr2.Field = key + 'T';
attr2.DefaultVal = defaultVal;
attr2.MyDataType = DataType.AppString;
attr2.MyFieldType = FieldType.Normal;
attr2.MaxLength = 200;
attr2.Desc = name;
attr2.UIContralType = UIContralType.TB;
attr2.HelperUrl = helpDoc;
attr2.UIIsLine = !!isUILine;
// attr.UIBindKey = sql;
attr2.UIIsReadonly = true;
attr2.UIVisible = false;
this.Attrs.Add(attr2);
}
#endregion 枚举属性.
#region 增加大块文本输入
public void AddTBStringDoc()
{
AddTBStringDoc("Doc", "Doc", null, "内容", true, false, 0, 4000, 10, true);
}
public void AddTBStringDoc(string key, string defaultVal, string desc, bool uiVisable, bool isReadonly, bool isUILine, int rows = 10)
{
AddTBStringDoc(key, key, defaultVal, desc, uiVisable, isReadonly, 0, 4000, rows, isUILine);
}
public void AddTBStringDoc(string key, string defaultVal, string desc, bool uiVisable, bool isReadonly)
{
AddTBStringDoc(key, key, defaultVal, desc, uiVisable, isReadonly, 0, 4000, 300, false);
}
public void AddTBStringDoc(string key, string defaultVal, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int rows)
{
AddTBStringDoc(key, key, defaultVal, desc, uiVisable, isReadonly, minLength, maxLength, rows, false);
}
public void AddTBStringDoc(string key, string field, string defaultVal, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int rows, bool isUILine, bool isRichText = false)
{
if (field == null)
field = key;
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIWidth = 300;
attr.UIIsReadonly = isReadonly;
attr.MaxLength = maxLength; //决定是否是超级长度字段.
attr.MinLength = minLength;
attr.MyFieldType = FieldType.Normal;
attr.UIHeight = rows;
if (isRichText == true)
{
attr.IsSupperText = 1; //是富文本. 都要解析为上下结构.
isUILine = true; //必须是上下结构.
}
else
{
attr.IsSupperText = 0; //不是富文本. 根据 isUILine 解析是否上下结构.
}
attr.UIIsLine = isUILine;
this.Attrs.Add(attr);
}
#endregion
#region PK
public void AddTBStringPK(string key, string defaultVal, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
this.PKs = key;
AddTBString(key, key, defaultVal, FieldType.PK, desc, uiVisable, isReadonly, minLength, maxLength, tbWith, false);
}
public void AddTBStringPK(string key, string field, object defaultVal, string desc, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
this.PKs = key;
AddTBString(key, field, defaultVal, FieldType.PK, desc, uiVisable, isReadonly, minLength, maxLength, tbWith, false);
}
#endregion
#region PKNo
#endregion
#region 外键于 Ens 有关系的操作。
/// <summary>
/// 外键于 Ens 有关系的操作。
/// </summary>
/// <param name="key">属性</param>
/// <param name="field">字段</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="ens">实体</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
/// <param name="minLength">最小长度</param>
/// <param name="maxLength">最大长度</param>
/// <param name="tbWith">宽度</param>
public void AddTBStringFKEns(string key, string field, string defaultVal, string desc, Entities ens, string refKey, string refText, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
attr.UIBindKey = ens.ToString();
attr.HisFKEns = ens;
// attr.UIBindKeyOfEn = ens.GetNewEntity.ToString();
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIWidth = tbWith;
attr.UIIsReadonly = isReadonly;
attr.MaxLength = maxLength;
attr.MinLength = minLength;
attr.UIRefKeyValue = refKey;
attr.UIRefKeyText = refText;
attr.MyFieldType = FieldType.FK;
this.Attrs.Add(attr);
}
/// <summary>
/// 外键于 Ens 有关系的操作。
/// </summary>
/// <param name="key">属性</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="ens">实体</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
/// <param name="minLength">最小长度</param>
/// <param name="maxLength">最大长度</param>
/// <param name="tbWith">宽度</param>
public void AddTBStringFKEns(string key, string defaultVal, string desc, Entities ens, string refKey, string refText, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
this.AddTBStringFKEns(key, key, defaultVal, desc, ens, refKey, refText, uiVisable, isReadonly, minLength, maxLength, tbWith);
}
#endregion
#region 于多值有关系的操作
/// <summary>
/// 于多值有关系的操作
/// </summary>
/// <param name="key"></param>
/// <param name="field"></param>
/// <param name="defaultVal"></param>
/// <param name="desc"></param>
/// <param name="ens"></param>
/// <param name="uiVisable"></param>
/// <param name="isReadonly"></param>
/// <param name="minLength"></param>
/// <param name="maxLength"></param>
/// <param name="tbWith"></param>
public void AddTBMultiValues(string key, string field, object defaultVal, string desc, Entities ens, string refValue, string refText, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
attr.UIBindKey = ens.ToString();
attr.HisFKEns = ens;
// attr.UIBindKeyOfEn = ens.GetNewEntity.ToString();
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIWidth = tbWith;
attr.UIIsReadonly = isReadonly;
attr.UIRefKeyText = refText;
attr.UIRefKeyValue = refValue;
attr.MaxLength = maxLength;
attr.MinLength = minLength;
attr.MyFieldType = FieldType.MultiValues;
this.Attrs.Add(attr);
}
#endregion
#region 主键于 Ens 有关系的操作。
/// <summary>
/// 外键于 Ens 有关系的操作。
/// 主键
/// </summary>
/// <param name="key">属性</param>
/// <param name="field">字段</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="ens">实体</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
/// <param name="minLength">最小长度</param>
/// <param name="maxLength">最大长度</param>
/// <param name="tbWith">宽度</param>
public void AddTBStringPKEns(string key, string field, object defaultVal, string desc, Entities ens, string refVal, string refText, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
attr.UIBindKey = ens.ToString();
attr.HisFKEns = attr.HisFKEns;
//attr.UIBindKeyOfEn = ens.GetNewEntity.ToString();
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIWidth = tbWith;
attr.UIIsReadonly = isReadonly;
attr.UIRefKeyText = refText;
attr.UIRefKeyValue = refVal;
attr.MaxLength = maxLength;
attr.MinLength = minLength;
attr.MyFieldType = FieldType.PKFK;
this.Attrs.Add(attr);
}
/// <summary>
/// 外键于 Ens 有关系的操作。
/// </summary>
/// <param name="key">属性</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="ens">实体</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
/// <param name="minLength">最小长度</param>
/// <param name="maxLength">最大长度</param>
/// <param name="tbWith">宽度</param>
public void AddTBStringPKEns(string key, string defaultVal, string desc, Entities ens, string refKey, string refText, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
this.AddTBStringPKEns(key, key, defaultVal, desc, ens, refKey, refText, uiVisable, isReadonly, minLength, maxLength, tbWith);
}
#endregion
#region 主键于 DataHelpKey 有关系的操作。
/// <summary>
/// 外键于 DataHelpKey 有关系的操作, 用与自定义的右键帮助系统.
/// </summary>
/// <param name="key">属性</param>
/// <param name="field">字段</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="DataHelpKey"> 在TB 里定义的右健帮助Key </param></param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
/// <param name="minLength">最小长度</param>
/// <param name="maxLength">最大长度</param>
/// <param name="tbWith">宽度</param>
public void AddTBStringPKSelf(string key, string field, object defaultVal, string desc, string DataHelpKey, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
attr.UIBindKey = DataHelpKey;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIWidth = tbWith;
attr.UIIsReadonly = isReadonly;
attr.MaxLength = maxLength;
attr.MinLength = minLength;
attr.MyFieldType = FieldType.PK;
this.Attrs.Add(attr);
}
/// <summary>
/// 外键于 Ens 有关系的操作。用与自定义的右键帮助系统.
/// </summary>
/// <param name="key">属性</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="DataHelpKey"> 在TB 里定义的右健帮助Key </param></param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
/// <param name="minLength">最小长度</param>
/// <param name="maxLength">最大长度</param>
/// <param name="tbWith">宽度</param>
public void AddTBStringPKSelf(string key, object defaultVal, string desc, string DataHelpKey, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
this.AddTBStringPKSelf(key, key, defaultVal, desc, DataHelpKey, uiVisable, isReadonly, minLength, maxLength, tbWith);
}
#endregion
#region 外键于 DataHelpKey 有关系的操作。
/// <summary>
/// 外键于 DataHelpKey 有关系的操作。用与自定义的右键帮助系统.
/// </summary>
/// <param name="key">属性</param>
/// <param name="field">字段</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="DataHelpKey"> 在TB 里定义的右健帮助Key </param></param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
/// <param name="minLength">最小长度</param>
/// <param name="maxLength">最大长度</param>
/// <param name="tbWith">宽度</param>
public void AddTBStringFKSelf(string key, string field, object defaultVal, string desc, string DataHelpKey, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppString;
attr.UIBindKey = DataHelpKey;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIWidth = tbWith;
attr.UIIsReadonly = isReadonly;
attr.MaxLength = maxLength;
attr.MinLength = minLength;
attr.MyFieldType = FieldType.Normal;
this.Attrs.Add(attr);
}
/// <summary>
/// 外键于 Ens 有关系的操作。用与 Ens 右键帮助系统.
/// </summary>
/// <param name="key">属性</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="DataHelpKey"> 在TB 里定义的右健帮助Key </param></param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
/// <param name="minLength">最小长度</param>
/// <param name="maxLength">最大长度</param>
/// <param name="tbWith">宽度</param>
public void AddTBStringFKSelf(string key, object defaultVal, string desc, string DataHelpKey, bool uiVisable, bool isReadonly, int minLength, int maxLength, int tbWith)
{
this.AddTBStringFKSelf(key, key, defaultVal, desc, DataHelpKey, uiVisable, isReadonly, minLength, maxLength, tbWith);
}
#endregion
#region 增加外键植
public void AddTBStringFKValue(string refKey, string key, string desc, bool IsVisable, int with)
{
}
#endregion
#endregion
#endregion
#region 日期类型
public void AddTBDate(string key)
{
switch (key)
{
case "RDT":
AddTBDate("RDT", "记录日期", true, true);
break;
case "UDT":
AddTBDate("UDT", "更新日期", true, true);
break;
default:
AddTBDate(key, key, true, true);
break;
}
}
/// <summary>
/// 增加日期类型的控健
/// </summary>
/// <param name="key">健值</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
public void AddTBDate(string key, string field, string defaultVal, string desc, bool uiVisable, bool isReadonly)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppDate;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIIsReadonly = isReadonly;
attr.MaxLength = 50;
this.Attrs.Add(attr);
}
/// <summary>
/// 增加日期类型的控健
/// </summary>
/// <param name="key">key</param>
/// <param name="defaultVal">defaultVal/如果你想用当天的信息,请选择后面的方法加入</param>
/// <param name="desc">desc</param>
/// <param name="uiVisable">uiVisable</param>
/// <param name="isReadonly">isReadonly</param>
public void AddTBDate(string key, string defaultVal, string desc, bool uiVisable, bool isReadonly)
{
AddTBDate(key, key, defaultVal, desc, uiVisable, isReadonly);
}
/// <summary>
/// 增加日期类型的控健(默认日期是当前日期)
/// </summary>
/// <param name="key">key</param>
/// <param name="desc">desc</param>
/// <param name="uiVisable">uiVisable</param>
/// <param name="isReadonly">isReadonly</param>
public void AddTBDate(string key, string desc, bool uiVisable, bool isReadonly)
{
AddTBDate(key, key, DateTime.Now.ToString(DataType.SysDataFormat), desc, uiVisable, isReadonly);
}
#endregion
#region 日期时间类型。
/// <summary>
/// 增加日期类型的控健
/// </summary>
/// <param name="key">健值</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
public void AddTBDateTime(string key, string field, string defaultVal, string desc, bool uiVisable, bool isReadonly)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppDateTime;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIIsReadonly = isReadonly;
attr.MaxLength = 50;
attr.UIWidth = 100;
this.Attrs.Add(attr);
}
public void AddTBDateTime(string key, string defaultVal, string desc, bool uiVisable, bool isReadonly)
{
this.AddTBDateTime(key, key, defaultVal, desc, uiVisable, isReadonly);
}
public void AddTBDateTime(string key, string desc, bool uiVisable, bool isReadonly)
{
this.AddTBDateTime(key, key, DateTime.Now.ToString(DataType.SysDateTimeFormat), desc, uiVisable, isReadonly);
}
#endregion
#region 资金类型
public void AddTBMoney(string key, string field, float defaultVal, string desc, bool uiVisable, bool isReadonly)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppMoney;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIIsReadonly = isReadonly;
this.Attrs.Add(attr);
}
public void AddTBMoney(string key, float defaultVal, string desc, bool uiVisable, bool isReadonly)
{
this.AddTBMoney(key, key, defaultVal, desc, uiVisable, isReadonly);
}
#endregion
#region Int类型
/// <summary>
/// 增加一个普通的类型。
/// </summary>
/// <param name="key">键</param>
/// <param name="_Field">字段</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
public void AddTBInt(string key, string _Field, int defaultVal, string desc, bool uiVisable, bool isReadonly)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = _Field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppInt; ;
attr.MyFieldType = FieldType.Normal;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIIsReadonly = isReadonly;
this.Attrs.Add(attr);
}
/// <summary>
/// 增加一个普通的类型。字段值与属性相同。
/// </summary>
/// <param name="key">键</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
public void AddTBInt(string key, int defaultVal, string desc, bool uiVisable, bool isReadonly)
{
this.AddTBInt(key, key, defaultVal, desc, uiVisable, isReadonly);
}
/// <summary>
/// 增加一个PK的类型。
/// </summary>
/// <param name="key">键</param>
/// <param name="_Field">字段</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
public void AddTBIntPK(string key, string _Field, int defaultVal, string desc, bool uiVisable, bool isReadonly, bool identityKey)
{
this.PKs = key;
Attr attr = new Attr();
attr.Key = key;
attr.Field = _Field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppInt; ;
attr.MyFieldType = FieldType.PK;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIIsReadonly = isReadonly;
if (identityKey)
attr.UIBindKey = "1"; //特殊标记此值,让它可以自动生成自增长的列.
this.Attrs.Add(attr);
}
/// <summary>
/// 增加一个PK的类型。字段值与属性相同。
/// </summary>
/// <param name="key">键</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
public void AddTBIntPKOID(string _field, string desc)
{
this.AddTBIntPK("OID", _field, 0, "OID", false, true, false);
}
public void AddTBIntPKOID()
{
this.AddTBIntPKOID("OID", "OID");
}
public void AddLang()
{
this.AddTBString("NameFT", null, "繁体", true, false, 0, 200, 150, false);
this.AddTBString("NameEn", null, "英文", true, false, 0, 200, 150, false);
this.AddTBString("NameJP", null, "日文", true, false, 0, 200, 150, false);
}
/// <summary>
/// 增加 AtParas字段.
/// </summary>
/// <param name="fieldLength"></param>
public void AddTBAtParas(int fieldLength = 4000)
{
this.AddTBString(EntityNoNameAttr.AtPara, null, "AtPara", false, true, 0, fieldLength, 10);
}
/// <summary>
/// 查询关键字:系统字段
/// </summary>
/// <param name="fieldLength"></param>
public void AddTBSKeyWords(int fieldLength = 4000)
{
this.AddTBString(EntityNoNameAttr.SKeyWords, null, "查询关键字", false, true, 0, fieldLength, 10);
}
/// <summary>
/// 主键
/// </summary>
public void AddMyPK(bool uiVisable = true)
{
this.PKs = "MyPK";
this.AddTBStringPK("MyPK", null, "主键MyPK", uiVisable, true, 1, 150, 10);
//Attr attr = new Attr();
//attr.Key = "MyPK";
//attr.Field = "MyPK";
//attr.DefaultVal = null;
//attr.MyDataType=DataType.AppString);
//attr.MyFieldType = FieldType.PK;
//attr.Desc = "MyPK";
//attr.UITBShowType = TBType.TB;
//attr.setUIVisible(false);
//attr.UIIsReadonly = true;
//attr.MinLength = 1;
//attr.MaxLength = 100;
//this.Attrs.Add(attr);
}
/// <summary>
/// 增加自动增长列
/// </summary>
public void AddAID()
{
Attr attr = new Attr();
attr.Key = "AID";
attr.Field = "AID";
attr.DefaultVal = null;
attr.MyDataType = DataType.AppInt; ;
attr.MyFieldType = FieldType.PK;
attr.Desc = "AID";
attr.UIVisible = false;
attr.UIIsReadonly = true;
this.Attrs.Add(attr);
}
/// <summary>
/// 增加一个PK的类型。字段值与属性相同。
/// </summary>
/// <param name="key">键</param>
/// <param name="defaultVal">默认值</param>
/// <param name="desc">描述</param>
/// <param name="uiVisable">是不是可见</param>
/// <param name="isReadonly">是不是只读</param>
public void AddTBIntPK(string key, int defaultVal, string desc, bool uiVisable, bool isReadonly)
{
this.AddTBIntPK(key, key, defaultVal, desc, uiVisable, isReadonly, false);
}
public void AddTBIntPK(string key, int defaultVal, string desc, bool uiVisable, bool isReadonly, bool identityKey)
{
this.AddTBIntPK(key, key, defaultVal, desc, uiVisable, isReadonly, identityKey);
}
#endregion
#region Float类型
public void AddTBFloat(string key, string _Field, float defaultVal, string desc, bool uiVisable, bool isReadonly)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = _Field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppFloat;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIIsReadonly = isReadonly;
this.Attrs.Add(attr);
}
public void AddTBFloat(string key, float defaultVal, string desc, bool uiVisable, bool isReadonly)
{
this.AddTBFloat(key, key, defaultVal, desc, uiVisable, isReadonly);
}
#endregion
#region Decimal类型
public void AddTBDecimal(string key, string _Field, decimal defaultVal, string desc, bool uiVisable, bool isReadonly)
{
Attr attr = new Attr();
attr.Key = key;
attr.Field = _Field;
attr.DefaultVal = defaultVal;
attr.MyDataType = DataType.AppMoney;
attr.Desc = desc;
attr.UIVisible = uiVisable;
attr.UIIsReadonly = isReadonly;
this.Attrs.Add(attr);
}
public void AddTBDecimal(string key, decimal defaultVal, string desc, bool uiVisable, bool isReadonly)
{
this.AddTBDecimal(key, key, defaultVal, desc, uiVisable, isReadonly);
}
#endregion
#endregion
#endregion
}
}