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(); }
/// <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; }
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); }
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]); }
/// <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); } }
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)); }