public static HtmlBuilder CrosstabBody( this HtmlBuilder hb, Context context, SiteSettings ss, View view, Column groupByX, Column groupByY, List <Column> columns, string aggregateType, Column value, string timePeriod, DateTime month, EnumerableRowCollection <DataRow> dataRows, bool inRange = true) { if (!inRange) { return(hb); } if (groupByY != null) { hb.Table( context: context, ss: ss, choicesX: CrosstabUtilities.ChoicesX(groupByX, timePeriod, month), choicesY: CrosstabUtilities.ChoicesY(groupByY), aggregateType: aggregateType, value: value, daily: Daily(groupByX, timePeriod), data: CrosstabUtilities.Elements(groupByX, groupByY, dataRows)); } else { var columnList = CrosstabUtilities.GetColumns( context: context, ss: ss, columns: columns); hb.Table( context: context, ss: ss, choicesX: CrosstabUtilities.ChoicesX(groupByX, timePeriod, month), choicesY: CrosstabUtilities.ChoicesY(columnList), aggregateType: aggregateType, value: value, daily: Daily(groupByX, timePeriod), data: CrosstabUtilities.ColumnsElements(groupByX, dataRows, columnList)); } return(hb .Hidden(controlId: "CrosstabXType", value: groupByX?.TypeName) .Hidden(controlId: "CrosstabPrevious", value: Times.PreviousMonth(month)) .Hidden(controlId: "CrosstabNext", value: Times.NextMonth(month)) .Hidden(controlId: "CrosstabThisMonth", value: Times.ThisMonth())); }
private static HtmlBuilder CrosstabColumnsBody( this HtmlBuilder hb, SiteSettings ss, View view, string groupByX, string columns, string aggregateType, string value, string timePeriod, DateTime month, EnumerableRowCollection <DataRow> dataRows) { var columnList = CrosstabUtilities.GetColumns( ss, columns.Deserialize <IEnumerable <string> >()); var data = new List <CrosstabElement>(); dataRows.ForEach(o => columnList.ForEach(column => data.Add(new CrosstabElement( o["GroupByX"].ToString(), column, o[column].ToDecimal())))); var xColumn = ss.GetColumn(groupByX); var choicesX = xColumn?.TypeName == "datetime" ? CorrectedChoices(xColumn, timePeriod, month) : CorrectedChoices( xColumn, xColumn?.Choices(data.Select(o => o.GroupByX))); var choicesY = columnList.ToDictionary( o => o, o => new ControlData(ss.GetColumn(o)?.LabelText)); return(hb.Table( ss: ss, choicesX: choicesX, choicesY: choicesY, aggregateType: aggregateType, value: ss.GetColumn(value), daily: Daily(xColumn, timePeriod), columns: columnList, data: data)); }
private static HtmlBuilder CrosstabColumnsBody( this HtmlBuilder hb, SiteSettings ss, View view, Column groupByX, List <Column> columns, string aggregateType, Column value, string timePeriod, DateTime month, EnumerableRowCollection <DataRow> dataRows) { var columnList = CrosstabUtilities.GetColumns(ss, columns); var data = new List <CrosstabElement>(); dataRows.ForEach(o => columnList.ForEach(column => data.Add(new CrosstabElement( o.String(groupByX.ColumnName), column.ColumnName, o.Decimal(column.ColumnName))))); var choicesX = groupByX?.TypeName == "datetime" ? CorrectedChoices(groupByX, timePeriod, month) : groupByX.ChoiceHash.ToDictionary( o => o.Key, o => new ControlData(o.Value.Text)); var choicesY = columnList.ToDictionary( o => o.ColumnName, o => new ControlData(o?.LabelText)); return(hb.Table( ss: ss, choicesX: choicesX, choicesY: choicesY, aggregateType: aggregateType, value: value, daily: Daily(groupByX, timePeriod), columns: columnList, data: data)); }