Пример #1
0
        internal MatrixDisplayColumn(MatrixField mf, MatrixColumn col, int colIndex)
        {
            _mf       = mf;
            _mc       = col;
            _colIndex = colIndex;
            ConditionalFormatter formatter = mf.GetHeaderFormatter(colIndex);

            _columnHeaderText = string.Format(formatter, col.DataHeaderFormatString, this.DataHeaderValues);
            this.Visible      = string.IsNullOrEmpty(col.VisibleExpression) || formatter.Matches(col.VisibleExpression);
            _mainSortText     = string.IsNullOrWhiteSpace(mf.SortExpression) ? string.Empty : string.Format(formatter, mf.SortExpression, this.DataHeaderValues);

            switch (col.ColumnType)
            {
            case MatrixColumnType.RowTotal:
                _mainHeaderText = _mf.RowTotalHeaderText;
                break;

            case MatrixColumnType.CellValue:
                _mainHeaderText = string.Format(formatter, _mf.HeaderText.Split('|')[0], this.DataHeaderValues);
                break;

            default:
                break;
            }
            _columnTotals    = new decimal?[mf.DataCellFields.Length];
            _colTotalindexes = mf.DataCellFields
                               .Select((p, i) => this.MatrixColumn.ColumnTotalFormatString.Contains("{" + i.ToString()) ? i : -1)
                               .Where(p => p >= 0).ToArray();
        }
Пример #2
0
        /// <summary>
        /// Evaluates the data fields and uses the format string to create the string to return
        /// </summary>
        /// <param name="dataItem"></param>
        /// <param name="formatString"></param>
        /// <param name="fields"></param>
        /// <returns></returns>
        public static string GetCellText(object dataItem, string formatString, string[] fields)
        {
            if (fields == null || fields.Length == 0)
            {
                return(formatString);
            }

            Dictionary <string, object> values = new Dictionary <string, object>();

            //bool bIsEmpty = true;
            foreach (string field in fields)
            {
                object obj = DataBinder.Eval(dataItem, field);
                values.Add(field, obj);
            }
            try
            {
                ConditionalFormatter formatter = new ConditionalFormatter(p => values[p]);
                return(string.Format(formatter, formatString, values.Values.ToArray()));
            }
            catch (FormatException ex)
            {
                //Exception diag = new Exception(formatString, ex);
                //throw diag;
                return(ex.Message);
            }
            //}
        }
 public RuntimeParameter(string paramText, string attributeText, string parentLookup, string defaultValue, string stringFormat, ConditionalFormatter condition)
 {
     ParameterText = paramText;
     AttributeName = attributeText;
     ParentLookupName = parentLookup;
     DefaultValue = defaultValue;
     StringFormatter = stringFormat;
     Conditional = condition;
 }
Пример #4
0
 public RuntimeParameter(string paramText, string attributeText, string parentLookup, string defaultValue, string stringFormat, ConditionalFormatter condition)
 {
     ParameterText    = paramText;
     AttributeName    = attributeText;
     ParentLookupName = parentLookup;
     DefaultValue     = defaultValue;
     StringFormatter  = stringFormat;
     Conditional      = condition;
 }
Пример #5
0
 internal ConditionalFormatter GetHeaderFormatter(int columnIndex)
 {
     if (_headerFormatter == null)
     {
         _headerFormatter = new ConditionalFormatter(null);
     }
     _headerFormatter.Callback = varname => this.DataHeaderFields
                                 .Select((p, i) => p == varname ? i : -1)
                                 .Where(p => p >= 0).Select(p => this.DataHeaderValues[columnIndex][p])
                                 .Single();
     return(_headerFormatter);
 }
Пример #6
0
            public ConditionalFormatter(string matchValue, string trueValue, string falseValue)
            {
                Operator   = matchValue.StartsWith(">") || matchValue.StartsWith("<") ? matchValue[0] : '=';
                MatchValue = matchValue.TrimStart('>', '<');
                TrueValue  = trueValue;
                FalseValue = falseValue;

                if (falseValue.Contains('?'))                  // if any nested conditions
                {
                    string[] condition1 = falseValue.Split(new char[] { '?' }, 2);
                    string[] condition2 = condition1[1].Split(new char[] { '|' }, 2);
                    FalseCondition = new ConditionalFormatter(condition1[0], condition2[0], condition2[1]);
                }
            }
        public static RuntimeParameter Parse(string input)
        {
            var rp = new RuntimeParameter
            {
                ParameterText = input,
                AttributeName = input.Trim('{', '}')
            };

            if (rp.AttributeName.Contains(':'))
            {
                string[] paramList = rp.AttributeName.Split(':');
                rp.AttributeName = paramList[0];

                if (rp.AttributeName == "rand")
                {
                    rp.StringFormatter = paramList[1];
                }
                else
                {
                    if (paramList[1].Contains('?'))
                    {
                        rp.Conditional = ConditionalFormatter.Parse(paramList[1]);
                    }
                    else if (paramList.Length > 2)
                    {
                        rp.StringFormatter = paramList[1];
                        rp.Conditional     = ConditionalFormatter.Parse(paramList[2]);
                    }
                    else
                    {
                        rp.StringFormatter = paramList[1];
                    }
                }
            }

            if (rp.AttributeName.Contains('|'))
            {
                rp.DefaultValue  = rp.AttributeName.Split('|')[1];
                rp.AttributeName = rp.AttributeName.Split('|')[0];
            }

            if (rp.AttributeName.Contains('.'))
            {
                rp.ParentLookupName = rp.AttributeName.Split('.')[0];
                rp.AttributeName    = rp.AttributeName.Split('.')[1];
            }

            return(rp);
        }
            public ConditionalFormatter(string matchValue, string trueValue, string falseValue)
            {
                _operator  = matchValue.StartsWith(">") || matchValue.StartsWith("<") ? matchValue[0] : '=';
                MatchValue = matchValue.TrimStart('>', '<');
                TrueValue  = trueValue;
                FalseValue = falseValue;

                if (!falseValue.Contains('?'))
                {
                    return;
                }

                var condition1 = falseValue.Split(new [] { '?' }, 2);
                var condition2 = condition1[1].Split(new [] { '|' }, 2);

                _falseCondition = new ConditionalFormatter(condition1[0], condition2[0], condition2[1]);
            }
Пример #9
0
        /// <summary>
        /// Add <see cref="Items"/> from the data source. Derived classes should override this to add items
        /// from their custom data source.
        /// </summary>
        protected virtual void PerformDataBinding()
        {
            IEnumerable data = PerformSelect();

            if (data == null)
            {
                // Do nothing. This happens when no data source has been assigned to us
                return;
            }

            //Dictionary<string, object> dict;
            ConditionalFormatter formatter = new ConditionalFormatter(null);

            foreach (object dataItem in data)
            {
                DropDownItem item = new DropDownItem();
                if (string.IsNullOrEmpty(this.DataFields))
                {
                    item.CustomData = new Dictionary <string, object> {
                        { "", dataItem.ToString() }
                    };
                }
                else
                {
                    item.CustomData = this.DataFields.Split(',').Select(p => new
                    {
                        Field = p,
                        Value = DataBinder.Eval(dataItem, p)
                    }).ToDictionary(p => p.Field, q => (q.Value == DBNull.Value ? null : q.Value));
                }
                formatter.Callback = p => item.CustomData[p];
                object[] fieldValues = item.CustomData.Values.ToArray();
                item.Value = string.Format(formatter, this.DataValueFormatString, fieldValues);
                item.Text  = string.Format(formatter, this.DataTextFormatString, fieldValues);
                if (!string.IsNullOrEmpty(this.DataOptionGroupFormatString))
                {
                    item.OptionGroup = string.Format(formatter, this.DataOptionGroupFormatString, fieldValues);
                }
                if (!string.IsNullOrEmpty(this.DataCssClassFormatString))
                {
                    item.CssClass = string.Format(formatter, this.DataCssClassFormatString, fieldValues);
                }
                _items.Add(item);
            }
        }
Пример #10
0
        public void ConditionalFormatter()
        {
            var mockFormatter = new Mock<IFormatter<string>>();
            var mockFormatConditions = new Mock<IFormatConditions<string>>();

            mockFormatter.Setup(r => r.Format(It.IsAny<string>())).Returns<string>(a => a.ToUpper());
            mockFormatConditions.Setup(r => r.ShouldFormat(It.Is<string>(f => f == ("yes")))).Returns(true);
            mockFormatConditions.Setup(r => r.ShouldFormat(It.Is<string>(f => f == ("no")))).Returns(false);

            IConditionalFormatter<string,string> sut = new ConditionalFormatter<string, string>(mockFormatter.Object,mockFormatConditions.Object);
            
            Assert.Equal("FRED", sut.DetermineConditionsAndFormat("fred", "yes"));
            Assert.Equal("dave", sut.DetermineConditionsAndFormat("dave", "no"));
            Assert.Equal(null, sut.DetermineConditionsAndFormat(null, "no"));
            Assert.Equal(null, sut.DetermineConditionsAndFormat(null, "yes"));
            Assert.Equal("", sut.DetermineConditionsAndFormat("", "yes"));
            Assert.Equal("stefan", sut.DetermineConditionsAndFormat("stefan", null));
        }
            public ConditionalFormatter(string matchValue, string trueValue, string falseValue)
            {
                Operator = matchValue.StartsWith(">") || matchValue.StartsWith("<") ? matchValue[0] : '=';
                MatchValue = matchValue.TrimStart('>', '<');
                TrueValue = trueValue;
                FalseValue = falseValue;

                if (falseValue.Contains('?'))  // if any nested conditions
                {
                    string[] condition1 = falseValue.Split(new char[] { '?' }, 2);
                    string[] condition2 = condition1[1].Split(new char[] { '|' }, 2);
                    FalseCondition = new ConditionalFormatter(condition1[0], condition2[0], condition2[1]);
                }
            }