示例#1
0
        ///// <summary>
        ///// 执行表达式
        ///// </summary>
        ///// <returns></returns>
        //public double ExecuteSimpleExpression( DomExpressionEventArgs args )
        //{
        //    StringBuilder result = new StringBuilder();
        //    string[] items = VariableString.AnalyseVariableString(args.Expression , "[", "]");
        //    for (int iCount = 0; iCount < items.Length; iCount++)
        //    {
        //        if ((iCount % 2) == 0)
        //        {
        //            result.Append(items[iCount]);
        //        }
        //        else
        //        {
        //            object obj = mySourceElements[(iCount - 1) / 2];
        //            if (obj != null)
        //            {
        //                if (obj is DesignElement)
        //                {
        //                    double dbl = XReportExpression.NaN;
        //                    string v = ((DesignElement)obj).ReportValue;
        //                    if (v != null)
        //                    {
        //                        v = v.Trim();
        //                        if (v.Length > 0 && v.Length < 25)
        //                        {
        //                            dbl = XReportExpression.ToDouble(v);
        //                            //v = XReportExpression.RemoveCurrentySymbol(v);
        //                            //if (double.TryParse(v, out dbl) == false)
        //                            //{
        //                            //    dbl = XReportExpression.NaN;
        //                            //}
        //                        }
        //                    }
        //                    if (double.IsNaN(dbl))
        //                    {
        //                        // 若传入是文本就是“NaN”,则转换是会成功的,此处进行额外判断。
        //                        result.Append(XReportExpression.NaN.ToString());
        //                    }
        //                    else
        //                    {
        //                        result.Append(dbl.ToString());
        //                    }
        //                }
        //                else if (obj is ArrayList)
        //                {
        //                    ArrayList list = (ArrayList)obj;
        //                    for (int iCount2 = 0; iCount2 < list.Count; iCount2++)
        //                    {
        //                        if (iCount2 > 0)
        //                            result.Append(",");
        //                        double dbl = XReportExpression.NaN;
        //                        string v = ((DesignElement)list[iCount2]).ReportValue;
        //                        if (v != null)
        //                        {
        //                            v = v.Trim();
        //                            if (v.Length > 0 && v.Length < 25)
        //                            {
        //                                dbl = XReportExpression.ToDouble(v);
        //                                //v = XReportExpression.RemoveCurrentySymbol(v);
        //                                //if (double.TryParse(v, out dbl) == false)
        //                                //{
        //                                //    dbl = XReportExpression.NaN;
        //                                //}
        //                            }
        //                        }
        //                        if (double.IsNaN(dbl))
        //                        {
        //                            // 若传入是文本就是“NaN”,则转换是会成功的,此处进行额外判断。
        //                            result.Append(XReportExpression.NaN.ToString());
        //                        }
        //                        else
        //                        {
        //                            result.Append(dbl.ToString());
        //                        }

        //                        //result.Append(dbl.ToString());
        //                    }//for
        //                }
        //            }
        //        }
        //    }//for
        //    string txt = result.ToString();
        //    double dblResult = 0;
        //    try
        //    {
        //        XReportExpression exp = new XReportExpression(myElement.ReportDocument, txt);
        //        dblResult = Convert.ToDouble(exp.Evaluate());
        //        System.Diagnostics.Debug.WriteLine(string.Format(
        //            XReportStrings.ExecuteExpression_Name_Text_Result,
        //            myElement.ID,
        //            strExpression + " ==> " + txt.Replace(XReportExpression.NaN.ToString(), "NaN"),
        //            dblResult));
        //    }
        //    catch (Exception ext)
        //    {
        //        //System.Diagnostics.Debug.WriteLine( "XXXXXXXXXX " + result.ToString());
        //        System.Diagnostics.Debug.WriteLine(string.Format(
        //            XReportStrings.ExecuteExpression_Name_Text_Result,
        //            myElement.ID,
        //            strExpression + " ==> " + txt.Replace(XReportExpression.NaN.ToString(), "NaN"),
        //            ext.Message));
        //    }
        //    return dblResult;
        //}

        ///// <summary>
        /////  执行简单的表达式
        ///// </summary>
        ///// <param name="args"></param>
        //private void ExecuteSimpleExpression(DomExpressionEventArgs args)
        //{
        //    DomExpression exp = args.Expression;
        //    string sourceValue = null;
        //    if (args.Document.Parameters.Contains( this.SourceElementName))
        //    {
        //        object v = args.Document.Parameters.GetValue(this.SourceElementName);
        //        if (v != null && DBNull.Value.Equals(v) == false)
        //        {
        //            sourceValue = Convert.ToString(v);
        //        }
        //    }
        //    else
        //    {
        //        sourceValue = args.Document.GetFormValue(this.SourceElementName);
        //    }
        //    bool result = false;
        //    switch (this.Method)
        //    {
        //        case "=":
        //            {
        //                int cr = CompareValue(sourceValue, this.Value);
        //                result = cr == 0;
        //            }
        //            break;
        //        case ">":
        //            {
        //                int cr = CompareValue(sourceValue, this.Value);
        //                result = cr > 0;
        //            }
        //            break;
        //        case ">=":
        //            {
        //                int cr = CompareValue(sourceValue, this.Value);
        //                result = cr >= 0;
        //            }
        //            break;
        //        case "<":
        //            {
        //                int cr = CompareValue(sourceValue, this.Value);
        //                result = cr < 0;
        //            }
        //            break;
        //        case "<=":
        //            {
        //                int cr = CompareValue(sourceValue, this.Value);
        //                result = cr <= 0;
        //            }
        //            break;
        //        case "<>":
        //            {
        //                int cr = CompareValue(sourceValue, this.Value);
        //                result = cr != 0;
        //            }
        //            break;
        //        case "like":
        //            break;
        //    }
        //    args.Result = result;
        //    return result;
        //}

        //private int CompareValue(string v1, string v2)
        //{
        //    if (string.IsNullOrEmpty(v1) && string.IsNullOrEmpty(v2))
        //    {
        //        return 0;
        //    }
        //    if (v1 == v2)
        //    {
        //        return 0;
        //    }
        //    double dbl2 = 0;
        //    if (double.TryParse(v2, out dbl2))
        //    {
        //        // 进行数值比较
        //        double dbl1 = 0;
        //        if (double.TryParse(v1, out dbl1))
        //        {
        //            return dbl1.CompareTo(dbl2);
        //        }
        //    }
        //    else
        //    {
        //        if (v1 != null)
        //        {
        //            return v1.CompareTo(v2);
        //        }
        //        else
        //        {
        //            return 0 - v2.CompareTo(v1);
        //        }
        //    }
        //    return 0;
        //}

        /// <summary>
        /// 处理文档元素内容发生改变事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        public virtual void HandleContentChanged(object sender, ContentChangedEventArgs args)
        {
            this.Document.Enumerate(delegate(object sender2, ElementEnumerateEventArgs args2)
            {
                DomExpressionList expressions = null;
                if (args2.Element is DomContainerElement)
                {
                    expressions = ((DomContainerElement)args.Element).Expressions;
                }
                if (expressions != null)
                {
                    DomExpressionEventArgs args3 = new DomExpressionEventArgs();
                    args3.Document = this.Document;
                    args3.Element  = args.Element;
                    foreach (DomExpression item in expressions)
                    {
                        args3.Expression = item;
                        if (item.ReferencedElementsRefreshed == false)
                        {
                            this.UpdateReferencedElements(args3);
                        }
                        if (item.ReferencedElements != null &&
                            item.ReferencedElements.Contains(args.Element))
                        {
                            object result = this.Execute(args3);
                        }
                    }
                }
            });
        }
示例#2
0
 /// <summary>
 /// 执行表达式
 /// </summary>
 /// <param name="args">参数</param>
 /// <returns>执行结果</returns>
 public virtual object Execute(DomExpressionEventArgs args)
 {
     if (args.Expression.Type == DomExpressionType.Simple)
     {
     }
     if (CustomExecute != null)
     {
         CustomExecute(this, args);
     }
     return(args.Result);
 }
示例#3
0
 /// <summary>
 /// 更新表达式中引用的文档元素列表
 /// </summary>
 /// <param name="args">参数</param>
 public virtual void UpdateReferencedElements(DomExpressionEventArgs args)
 {
     args.Expression.ReferencedElementsRefreshed = true;
 }