using System;

namespace JXC_MIS.MyClass
{
	/// <summary>
	/// 参照数据源
	/// </summary>
	public struct MyReferto   //
	{
		public string Table;
		public string Where;
		public string Field;
	
	}
	/// <summary>
	/// 代码转换数据源
	/// </summary>
	public struct MyCodeToName   //
	{
		public string Table;
		public string CodeField;
		public string NameField;
		public string Where;

	}
	/// <summary>
	/// ClsCellAttrib [对齐方式; 默认值;是否编辑;参照类型;参照数据源;是否保存;是否代码转换{表名，代码字段，名称字段};数据保存时数据验证（0或空=可以为空，1=不为空，2=日期验证，3=数值验证)；计算列；该列是否列合计（sum）]
	/// </summary>
	public class ClsCellAttrib
	{
		enum MyRefertoType {DateList,TreeList,ListBox,DriveList,ViewList}//参照类型
		public MyReferto Referto;
		public MyCodeToName DataCodeToName;
		private string m_FormatString  ;	           // [对齐方式; 默认值;是否编辑;参照类型;参照数据源;是否保存;是否代码转换{表名，代码字段，名称字段};数据保存时数据验证（0或空=可以为空，1=不为空，2=日期验证，3=数值验证)；计算列；该列是否列合计（sum）]
		private string m_TextAlign  ;	               //对齐方式
		private string m_TextDefault  ;	               //默认值;
		private bool m_ReadOnly =false ;	           //是否编辑
		private string m_RefertoType  ;			       //参照类型
		private string m_RefertoReturnCols  ;		   //参照返回列值
		private string m_RefertoInputCols  ;		    //目标列对应列
		private string m_RefertoDataSource  ;	        //参照数据源

		private bool m_NotSave=false  ;				   //不否保存
		private string m_CodeToName  ;				   //代码转换{表名，代码字段，名称字段}
		private string m_CheckType  ;					//数据保存时数据验证类型（0或空=可以为空，1=不为空，2=日期验证，3=数值验证)
		private string m_ColExpress  ;				    //计算表达式
		private bool m_ColSum  ;						 //计算列求和
		private string m_AlignFoldCol  ;				 //对齐方式折行标识
		private string m_Caption  ;					    //标题
		private string m_ShowFormat  ;					 //单元格显示格式
        private bool m_NoDataBind=false;			    //不绑定数据

		/// <summary>
		/// 格式化的字符串
		/// </summary>
		public string FormatString
		{ 
			get {return m_FormatString;} 
			set
			{ 
				m_FormatString=value;
				if (m_FormatString!=null)
				{
					GetCellDesc(m_FormatString);
				}
			} 
		} 
		/// <summary>
		/// 对齐方式折行标识
		/// </summary>
		public string AlignFoldCol
		{ 
			get {return m_AlignFoldCol;} 
			set { m_AlignFoldCol=value;} 
		} 

		/// <summary>
		/// 对齐方式
		/// </summary>
		public string TextAlign
		{ 
			get {return m_TextAlign;} 
			set { m_TextAlign=value;} 
		} 
		/// <summary>
		/// 标题
		/// </summary>
		public string Caption
		{ 
			get {return m_Caption;} 
			set { m_Caption=value;} 
		} 
		/// <summary>
		/// 默认值
		/// </summary>
		public string TextDefault
		{ 
			get {return m_TextDefault;} 
			set { m_TextDefault=value;} 
		} 
		/// <summary>
		/// 是否编辑 true不可以编辑 false 可以编辑
		/// </summary>
		public bool ReadOnly
		{ 
			get {return m_ReadOnly;} 
			set { m_ReadOnly=value;} 
		} 
		/// <summary>
		/// 是否绑定数据 true不绑定数据 false 绑定
		/// </summary>
		public bool NoDataBind
		{ 
			get {return m_NoDataBind;} 
			set { m_NoDataBind=value;} 
		} 
		/// <summary>
		/// 参照类型
		/// </summary>
		public string RefertoType
		{ 
			get {return m_RefertoType;} 
			set { m_RefertoType=value;} 
		} 

		/// <summary>
		/// 返回参照对应列“ 1:2:3:4:5”
		/// </summary>
		public string RefertoReturnCols
		{ 
			get {return m_RefertoReturnCols;} 
			set { m_RefertoReturnCols=value;} 
		} 

		/// <summary>
		/// 目标对应输入的列 “ 1:2:3:4:5”
		/// </summary>
		public string RefertoInputCols
		{ 
			get {return m_RefertoInputCols;} 
			set { m_RefertoInputCols=value;} 
		} 



		/// <summary>
		/// 参照数据源
		/// </summary>
		public string RefertoDataSource
		{ 
			get {return m_RefertoDataSource;} 
			set { m_RefertoDataSource=value;} 
		} 
		

		/// <summary>
		/// 是否不保存 true =不保存 false=保存
		/// </summary>
		public bool NotSave
		{ 
			get {return m_NotSave;} 
			set { m_NotSave=value;} 
		} 
		/// <summary>
		/// 代码转换{表名，代码字段，名称字段}
		/// </summary>
		public string CodeToName
		{ 
			get {return m_CodeToName;} 
			set { m_CodeToName=value;} 
		} 
		/// <summary>
		/// 数据保存时数据验证类型（0或空=可以为空，1=不为空，2=日期验证，3=数值验证)
		/// </summary>
		public string CheckType
		{ 
			get {return m_CheckType;} 
			set { m_CheckType=value;} 
		} 


		/// <summary>
		/// 计算列求和
		/// </summary>
		public bool ColSum
		{ 
			get {return m_ColSum;} 
			set { m_ColSum=value;} 
		} 
		/// <summary>
		/// 计算表达式
		/// </summary>
		public string ColExpress
		{ 
			get {return m_ColExpress;} 
			set { m_ColExpress=value;} 
		} 

		/// <summary>
		/// 单元格显示格式
		/// </summary>
		public string ShowFormat
		{ 
			get {return m_ShowFormat;} 
			set { m_ShowFormat=value;} 
		} 

		
		public ClsCellAttrib()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
		}
		
		/// <summary>
		/// 获取字符串
		/// </summary>
		public string GetFormatString()
		{
			string s="";
			s=m_TextAlign +m_Caption+";";
			s=s+m_TextDefault +";";
			if (m_ReadOnly==false)
			{
				s=s+";";
			}
			else
			{
				s=s+m_ReadOnly.ToString() +";";
			}

			s=s+m_RefertoType +";";
			s=s+m_RefertoDataSource+";";
			if (m_NotSave==false)
			{
				s=s+";";
			}
			else
			{
				s=s+m_NotSave.ToString() +";";
			}
			s=s+m_CodeToName +";";
			s=s+m_CheckType +";";
			s=s+m_ColExpress +";";
			if (m_ColSum==false)
			{
				s=s+";";
			}
			else
			{
				s=s+m_ColSum.ToString() +";";
			}
			s=s+m_ShowFormat+";";
			if (m_NoDataBind==false)
			{
				s=s+";";
			}
			else
			{
				s=s+m_NoDataBind.ToString();
			}

			string [] ArrSplit = s.Split(';'); //     临时数组变量
			int j=ArrSplit.Length ;
			int n=0;
			for (int i=j-1;j>=0;i--)
			{
				if (i!=-1 && ArrSplit[i]=="") 
				{n++;}
				else
				{break;}
			}

			if (j==n)
			{s="";} else {s=s.Substring(0,s.Length-n);}
			return s;
		}

		/// <summary>
		/// 解析 默认缺省值、参照
		/// </summary>
		private void GetCellDesc(string ReadText)
		{
			string [] ArrSplit = null; //     临时数组变量
			string [] ArrSplit1 = null; //     临时数组变量

			int j=0;
			m_TextAlign=""  ;	               //对齐方式
			m_TextDefault=null   ;	                //默认值;
			m_ReadOnly =false ;	                    //是否编辑
			m_RefertoType=null   ;			       //参照类型
			m_RefertoReturnCols="";
			m_RefertoInputCols="";
			m_RefertoType="";

			m_RefertoDataSource=null   ;	        //参照数据源
			m_NotSave=false  ;				        //不否保存
			m_CodeToName=null   ;				   //代码转换{表名，代码字段，名称字段}
			m_CheckType=null   ;					//数据保存时数据验证类型（0或空=可以为空，1=不为空，2=日期验证，3=数值验证)
			m_ColSum=false   ;						 //计算列求和
			m_ColExpress=null   ;				    //计算表达式
			m_AlignFoldCol=""   ;				    //计算表达式折行标识
			m_Caption=null   ;		
			m_ShowFormat=null;
			m_NoDataBind=false;
			ArrSplit=ReadText.Split(';'); 
			j=ArrSplit.Length ;
			//解析 0默认缺省值(Date=当前日期，Operator=登录操作员，)
			//解析 1参照类型(0,1,2,3,4,5)
			//解析 2参照数据源(数据表或SQL语句)
			//解析 3是否保存(True,False或 否)		
			//解析 4是否代码转换{表名，代码字段，名称字段}		
			//解析 5数据保存时数据验证（0或空=可以为空，1=不为空，2=日期验证，3=数值验证)
			//'设置标题
			string ReadText1="";
					//分析 [0对齐方式(^,<,>,$,<$,^$,>$);1默认值; 2是否编辑(T,F);3参照类型(0,1,2,3,4,5);4参照数据源(连接数据表SQL语句);5是否保存;6是否代码转换{表名，代码字段，名称字段};7是否可以为空(T,F)]
					j=ArrSplit.Length ;
					if (j>0 && ArrSplit[0].Trim()!="")//解析 
					{
						ReadText1=ArrSplit[0].Trim();
						//'换行标志$ 分析 [0对齐方式(^,<,>,$,<$,^$,>$)
						if (ReadText1.Trim()=="$" )	{m_AlignFoldCol="$";	}
						if (ReadText1.Trim().Length>1)
						{
							if (ReadText1.Trim().Substring(1,1)=="$" )		{m_AlignFoldCol="$";}
						}

						if (ReadText1.Trim().Substring(0,1)=="<" || ReadText1.Trim().Substring(0,1)=="^" || ReadText1.Trim().Substring(0,1)==">")	
						{
							m_TextAlign=ReadText1.Trim().Substring(0,1);
//							m_AlignFoldCol=m_TextAlign;

						}
						//解析 标题 默认值
						if (ReadText1.Trim().Length>1)
						{
							if (ReadText1.Trim().Substring(0,1)=="<" || ReadText1.Trim().Substring(0,1)=="^" || ReadText1.Trim().Substring(0,1)==">" || ReadText1.Trim().Substring(0,1)=="$")	
							{
								ReadText1=ReadText1.Trim().Substring(1,ReadText1.Trim().Length-1);
								if (ReadText1.Trim().Length>=1 && ReadText1.Trim().Substring(0,1)=="$")	
								{
									ReadText1=ReadText1.Trim().Substring(1,ReadText1.Trim().Length-1);

								}
							}
							m_Caption=ReadText1.Trim();
						}

						
					}

					if (j>1 && ArrSplit[1].Trim()!="")	//解析 1默认值
					{
						ReadText1=ArrSplit[1].Trim();
						m_TextDefault=ReadText1;		
                       
					}
					if (j>2 && ArrSplit[2].Trim()!="")//解析 2是否编辑(T,F)
					{
						ReadText1=ArrSplit[2].Trim();
						if (ReadText1=="T" || ReadText1=="t" || ReadText1=="True" || ReadText1=="true" || ReadText1=="是")
						{
							ReadOnly =true;
						}
						else
						{m_ReadOnly =false;}
					}
					if (j>3 && ArrSplit[3].Trim()!="")//解析 3参照类型(0,1,2,3,4,5)
					{
						ReadText1="";
						ArrSplit1=ArrSplit[3].Split(',');
						int L=ArrSplit1.Length ;
						if (L>0) {ReadText1=ArrSplit1[0];}
						if (L>1) {m_RefertoReturnCols=ArrSplit1[1];}
						if (L>2) {m_RefertoInputCols=ArrSplit1[2];}
						if (ReadText1!="" && Char.IsNumber(ReadText1.Trim(),0)==true)
						{
							m_RefertoType=ReadText1.Trim();
						}
						ArrSplit1=null;

					}
					if (j>4 && ArrSplit[4].Trim()!="")//解析 3参照数据源()
					{
						m_RefertoDataSource=ArrSplit[4].Trim();
						ArrSplit1=m_RefertoDataSource.Split('/');
						int l=ArrSplit1.Length ;
						if (l>0) {Referto.Table=ArrSplit1[0];}
						if (l>1) {Referto.Field=ArrSplit1[1];}
						if (l>2) {Referto.Where =ArrSplit1[2];}
						ArrSplit1=null;
					}
					if (j>5 && ArrSplit[5].Trim()!="")//解析 4是否保存(True,False)
					{
						ReadText1=ArrSplit[5].Trim();
						if (ReadText1=="T" || ReadText1=="t" || ReadText1=="True" || ReadText1=="true" || ReadText1=="是")
						{
							m_NotSave =true;
						}
						else
						{m_NotSave =false;}
					}
					if (j>6 && ArrSplit[6].Trim()!="")//解析 5是否代码转换{表名，代码字段，名称字段}
					{
						m_CodeToName=ArrSplit[6].Trim();
						ArrSplit1=m_CodeToName.Split(',');
						int l=ArrSplit1.Length ;
						if (l>0) {DataCodeToName.Table=ArrSplit1[0];}
						if (l>1) {DataCodeToName.CodeField=ArrSplit1[1];}
						if (l>2) {DataCodeToName.NameField=ArrSplit1[2];}
						if (l>3) {DataCodeToName.Where =ArrSplit1[3];}
						ArrSplit1=null;
						
					}
					if (j>7 && ArrSplit[7].Trim()!="")//解析 7数据保存时数据验证（0或空=可以为空，1=不为空，2=日期验证，3=数值验证)
					{
						m_CheckType=ArrSplit[7].Trim();

					}

					if (j>8 && ArrSplit[8].Trim()!="")//解析 8计算表达式
					{
						m_ColExpress=ArrSplit[8].Trim();
					}
					if (j>9 && ArrSplit[9].Trim()!="")//解析 9是否计算列求和
					{
						ReadText1=ArrSplit[9].Trim();
						if (ReadText1=="T" || ReadText1=="t" || ReadText1=="True" || ReadText1=="true" || ReadText1=="是")
						{
							m_ColSum =true;
						}
						else
						   {m_ColSum =false;}
					}
					if (j>10 && ArrSplit[10].Trim()!="")//解析 10 显示格式
					{
						m_ShowFormat=ArrSplit[10].Trim();
					}

					if (j>11 && ArrSplit[11].Trim()!="")//解析 11是否数据绑定
					{
						ReadText1=ArrSplit[11].Trim();
						if (ReadText1=="T" || ReadText1=="t" || ReadText1=="True" || ReadText1=="true" || ReadText1=="是")
						{
							m_NoDataBind =true;
						}
						else
						{m_NoDataBind =false;}
					}







		}
		
		






















	}
}
