public CalculateStackResult CalculateResult(CalculateStackResult tempResult, string strValueSpliter)
        {
            string strValue = string.Empty;

            switch (this.CacluteOperation)
            {
            case CombinedOperation.NumAdd:
                strValue = this.AddNumbersIntoAColumn(tempResult);
                break;

            case CombinedOperation.NumSubtract:
                strValue = this.SubtractNumbersIntoAColumn(tempResult);
                break;

            case CombinedOperation.NumMultipy:
                strValue = this.MultiPlayNumbersIntoAColumn(tempResult);
                break;

            case CombinedOperation.NumDivide:
                strValue = this.DivideNumbersIntoAColumn(tempResult);
                break;

            case CombinedOperation.StrConcat:
            default:
                strValue = this.ConcatString(tempResult, strValueSpliter);
                break;
            }

            CalculateStackResult calcuateResult = new CalculateStackResult(tempResult.CacluteOperation, strValue, tempResult.Bracket);

            return(calcuateResult);
        }
        private string ConcatString(CalculateStackResult tempResult, string strValueSpliter)
        {
            StringBuilder sbExpression = new StringBuilder();

            string strValue = Result.ToString();

            sbExpression.AppendFormat("{0}{1}{0}{2}", strValueSpliter, this.Result, tempResult.Result);

            return(sbExpression.ToString());
        }
        private string MultiPlayNumbersIntoAColumn(CalculateStackResult tempResult)
        {
            decimal number1 = 0m, number2 = 0m;

            decimal.TryParse(Result.ToString(), out number1);

            decimal.TryParse(tempResult.Result.ToString(), out number2);

            number1 *= number2;

            return(number1.ToString());
        }
        public CalculateStackResult GetResultWithoutBracket(Stack stack)        //Modified at 2009-2-16 15:35:41@Scott
        {
            ArrayList arr = new ArrayList();

            string strValue = string.Empty;

            while (stack.Count > 0)
            {
                CalculateStackResult br = stack.Pop() as CalculateStackResult;

                if (br.CacluteOperation >= CombinedOperation.NumMultipy)
                {
                    while (stack.Count > 0 && br.CacluteOperation >= CombinedOperation.NumMultipy)
                    {
                        CalculateStackResult tempResult = stack.Pop() as CalculateStackResult;

                        br = br.CalculateResult(tempResult, this.ValueSpliter);
                    }
                }

                arr.Add(br);
            }

            CalculateStackResult bRet = new CalculateStackResult(CombinedOperation.StrConcat, string.Empty, Bracket.NONE);

            if (arr.Count > 0)
            {
                bRet = arr[0] as CalculateStackResult;

                for (int i = 1; i < arr.Count; i++)
                {
                    CalculateStackResult tempResult = arr[i] as CalculateStackResult;

                    bRet = bRet.CalculateResult(tempResult, this.ValueSpliter);
                }
            }

            return(bRet);
        }
        public string GetResult(DataRow row)
        {
            string strValue = string.Empty;

            if (this.Field is CalculateColumnInfo)
            {
                object objValue = (Field as CalculateColumnInfo).GetResultWithBracket(row);

                strValue = objValue.ToString();
            }
            else
            {
                string strField = Field.ToString();

                if (!row.Table.Columns.Contains(strField))
                {
                    strValue = string.Empty;
                }
                else
                {
                    strValue = row[strField].ToString();
                }
            }

            if (this.ConstantValue == string.Empty)
            {
                return(strValue);
            }

            CalculateStackResult calcStackResult = new CalculateStackResult(this.CacluteConstantOperation, strValue, Bracket.NONE);

            CalculateStackResult calcResult2 = new CalculateStackResult(this.CacluteFieldOperation, this.ConstantValue, Bracket.NONE);

            calcStackResult = calcStackResult.CalculateResult(calcResult2, string.Empty);

            return(calcStackResult.Result.ToString());
        }
        private string DivideNumbersIntoAColumn(CalculateStackResult tempResult)
        {
            decimal number1 = 0m, number2 = 0m;

            decimal.TryParse(Result.ToString(), out number1);

            decimal.TryParse(tempResult.Result.ToString(), out number2);

            if (number2 == 0)
            {
                number1 = 0;
            }
            else
            {
                number1 /= number2;

                if (number1 * 100 != (int)(number1 * 100))
                {
                    number1 = decimal.Round(number1, 2);
                }
            }

            return(number1.ToString());
        }
        public object  GetResultWithBracket(DataRow row)
        {
            try
            {
                //12-17-2007@Scott
                Stack stack = new Stack();

                Stack tempstack;

                foreach (CalcElement calcElement in this)
                {
                    string strValue = calcElement.GetResult(row);

                    CalculateStackResult br = new CalculateStackResult(calcElement.CacluteFieldOperation, strValue, calcElement.Bracket);

                    if (calcElement.Bracket == Bracket.End)
                    {
                        tempstack = new Stack();

                        tempstack.Push(br);

                        br = stack.Pop() as CalculateStackResult;

                        while (br.Bracket != Bracket.Start)
                        {
                            tempstack.Push(br);

                            if (stack.Count == 0)
                            {
                                System.Windows.Forms.MessageBox.Show("Bad Bracket Count!");

                                return(false);
                            }

                            br = stack.Pop() as CalculateStackResult;
                        }
                        tempstack.Push(br);

                        br = GetResultWithoutBracket(tempstack);

                        br.Bracket = Bracket.NONE;
                    }

                    stack.Push(br);
                }

                tempstack = new Stack();

                while (stack.Count > 0)
                {
                    tempstack.Push(stack.Pop());
                }

                CalculateStackResult result = GetResultWithoutBracket(tempstack);

                return(result.Result);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("Check filter result error. Message:" + ex.Message);

                return(string.Empty);
            }
        }