Пример #1
0
 /// <summary>
 /// 解析右半边部分
 /// </summary>
 /// <param name="rightPart"></param>
 /// <param name="control"></param>
 private void DecodeRightPart(string rightPart, DecoderOfControl control)
 {
     //先看看简单的情况
     if (!rightPart.StartsWith("{"))
     {
         control.RightDirectValue = rightPart;
     }
     else
     {
         //右边也包含控件ID的情况
         string           pattern     = @"{(.*)}";
         string           trimPattern = Regex.Match(rightPart, pattern).Groups[1].ToString();
         string[]         rightpart   = trimPattern.Split('.');
         DecoderOfControl obj         = new DecoderOfControl();
         obj.CtrlId = CommonConverter.StringToInt(rightpart[0]);
         //obj.LeftCtrlProperty = rightpart[1];
         if (Regex.IsMatch(trimPattern, @"\d+.a\d+[(]\w*[)]"))
         {
             //取参数值
             obj.Patameter        = Regex.Match(trimPattern, @"[(](.*)[)]").Groups[1].ToString();
             obj.LeftCtrlProperty = rightpart[1].Replace(Regex.Match(trimPattern, @"[(](.*)[)]").Groups[0].ToString(), string.Empty);
         }
         else
         {
             obj.LeftCtrlProperty = rightpart[1];
         }
         control.RightDirectValue = obj;
     }
 }
Пример #2
0
        /// <summary>
        /// 处理sql请求
        /// </summary>
        /// <param name="value"></param>
        /// <param name="ic"></param>
        /// <returns></returns>
        public static bool dealWithSqlRequest(DecoderOfControl value, IControl ic)
        {
            string        sqlStr = @FormatSql(value.RightDirectValue.ToString(), ic);
            SqlController cnTemp = new SqlController();

            sqlStr = FormatSql(sqlStr, ic);
            var result = cnTemp.ExcuteSqlWithReturn(sqlStr);

            if (result.error_code.Equals("1"))
            {
                return(false);
            }
            string resultControlId       = string.Empty;
            string resultControlProperty = string.Empty;

            if (Regex.IsMatch(result.to, @"\d+.d\d+"))
            {
                resultControlId       = GetStringExceptChar(result.to).Split('.')[0];
                resultControlProperty = GetStringExceptChar(result.to).Split('.')[1];
            }
            else
            {
                resultControlId = result.to;
            }
            if (!string.IsNullOrEmpty(resultControlId))
            {
                int ctrlIndex = CurrentControlList.FindIndex(p => (p as FrameworkElement).Name.Equals(ConfigManagerSection.ControlNamePrefix + resultControlId));
                SetValue(CurrentControlList[ctrlIndex], result.data, resultControlProperty);
            }
            return(true);
        }
Пример #3
0
        /// <summary>
        /// sql语法处理
        /// </summary>
        /// <param name="inText"></param>
        /// <returns></returns>
        private DecoderOfControl DecodeSqlEvent(string inText)
        {
            DecoderOfControl control = new DecoderOfControl();

            control.Type             = EventType.SqlType;
            control.RightDirectValue = inText.Trim().Substring(4, inText.Trim().Length - 4);
            return(control);
        }
Пример #4
0
        /// <summary>
        /// 解析事件实体
        /// </summary>
        /// <param name="inText"></param>
        /// <returns></returns>
        public DecoderOfControl DecodeNewCharacter(string inText)
        {
            DecoderOfControl control = new DecoderOfControl();

            inText = inText.Trim();
            if (inText.ToLower().StartsWith("sql:"))
            {
                //sql语法的进行单独处理
                return(DecodeSqlEvent(inText));
            }

            if (inText.IndexOf("=") != -1 && Regex.IsMatch(inText, @"\d+.d\d+ *= *\w*"))
            {
                if (Regex.IsMatch(inText, @"\d+.d\d+ *=.*"))
                {
                    string leftPart = inText.Trim().Split('=')[0];
                    leftPart = Regex.Match(leftPart, @"\d+.\w\d+").Groups[0].ToString();

                    int    rightIndex = inText.Trim().IndexOf("=");
                    string rightPart  = inText.Substring(rightIndex + 1, inText.Length - rightIndex - 1).Trim();

                    this.DecodeLeftPart(leftPart, control);
                    this.DecodeRightPart(rightPart, control);
                }
            }
            else if (Regex.IsMatch(inText, @"\d+.a\d+[(]((.|\n)*)[)]"))
            {
                if (Regex.IsMatch(inText, @"\d+.a\d+[(]\d+,\w+=.*"))
                {
                    string leftParttern = Regex.Match(inText, @"[(]((.|\n)*)[)]").Groups[0].ToString().Trim();
                    string leftPart     = inText.Replace(leftParttern, string.Empty);
                    leftPart                 = Regex.Match(leftPart, @"\d+.\w\d+").Groups[0].ToString();
                    control.CtrlId           = CommonConverter.StringToInt(leftPart.Split('.')[0]);
                    control.LeftCtrlProperty = leftPart.Split('.')[1];
                    control.RightDirectValue = leftParttern.Substring(1, leftParttern.Length - 2);
                }
                else
                {
                    control.CtrlId = CommonConverter.StringToInt(inText.Split('.')[0]);
                    string rightpart = inText.Substring(inText.IndexOf(".") + 1);
                    control.RightDirectValue = Regex.Match(rightpart, @"[(]((.|\n)*)[)]").Groups[1].ToString();
                    control.LeftCtrlProperty = rightpart.Replace(Regex.Match(rightpart, @"[(]((.|\n)*)[)]").Groups[0].ToString(), string.Empty);
                }
            }
            //事件语法,例如12.a1
            else if (Regex.IsMatch(inText, @"\d+.a|A\d+"))
            {
                control.CtrlId           = CommonConverter.StringToInt(inText.Trim().Split('.')[0]);
                control.LeftCtrlProperty = inText.Trim().Split('.')[1];
            }
            //事件语法,例如12.a5(1236)

            return(control);
        }
Пример #5
0
        /// <summary>
        /// 执行事件
        /// </summary>
        /// <param name="docObj"></param>
        /// <param name="ic"></param>
        public static void ExcuteOneEvent(DecoderOfControl docObj, IControl ic)
        {
            SetCurrentControlList(ic);
            int ctrlIndex = CurrentControlList.FindIndex
                                (p => (p as FrameworkElement).Name.Equals(ConfigManagerSection.ControlNamePrefix + docObj.CtrlId.ToString()));

            if (ctrlIndex == -1 && !docObj.Type.Equals(EventType.SqlType))
            {
                return;
            }
            else
            {
                CallMethodByPropertyName(CurrentControlList[ctrlIndex], docObj);
            }
        }
Пример #6
0
        /// <summary>
        /// 事件里面的方法
        /// </summary>
        /// <param name="control"></param>
        /// <param name="value"></param>
        private static void CallMethodByPropertyName(IControl control, DecoderOfControl value)
        {
            if (value.Type.Equals(EventType.SqlType))
            {
                dealWithSqlRequest(value, control);
                return;
            }

            object controlValue = null;

            if (value.RightDirectValue is DecoderOfControl)
            {
                DecoderOfControl rightValue   = value.RightDirectValue as DecoderOfControl;
                IControl         rightControl = CurrentControlList.First(p => rightValue.CtrlId == ((p as FrameworkElement).Tag as ControlDetailForPage).ctrl_id);
                controlValue = GetValueWithParameter(rightControl, rightValue.LeftCtrlProperty, rightValue.Patameter);
            }
            else
            {
                controlValue = object.Equals(value.RightDirectValue, null) ? string.Empty : value.RightDirectValue;
            }
            SetValue(control, controlValue, value.LeftCtrlProperty);
        }
 public void SetA1(string text)
 {
     try
     {
         DecoderOfControl dct = new DecoderOfControl();
         //dct.CtrlId = int.Parse(this.Name);
         dct.RightDirectValue = (this.Tag as ControlDetailForPage).d0;
         //执行d0sql的数据获取
         if (EventAssitant.dealWithSqlRequest(dct, this))
         {
             //触发后触发的事件
             EventAssitant.CallEventDerectly((this.Tag as ControlDetailForPage).p9, this);
         }
         else
         {
             //触发后触发的事件
             EventAssitant.CallEventDerectly((this.Tag as ControlDetailForPage).p12, this);
         }
     }
     catch (Exception ex)
     {
         Logging.Error("数据控件出错:" + ex.Message);
     }
 }
Пример #8
0
 /// <summary>
 /// 解析左半边部分
 /// </summary>
 /// <param name="leftPart"></param>
 private void DecodeLeftPart(string leftPart, DecoderOfControl control)
 {
     control.CtrlId = CommonConverter.StringToInt(leftPart.Trim().Split('.')[0]);
     //排除掉"."符号
     control.LeftCtrlProperty = leftPart.Trim().Split('.')[1];
 }