/// <summary> /// Create a new table cell from a column definition and value /// </summary> /// <param name="columnDefinition">The column definition</param> /// <param name="value">The cell value</param> /// <param name="action">The cell action (optional)</param> /// <returns>The table cell created</returns> private TableCell CreateTableCell ( TableColumnDefinition columnDefinition, object value, ReportAction action = null ) { var column = new TableColumn ( columnDefinition.Name, columnDefinition.Title, columnDefinition.Alignment, columnDefinition.Importance, columnDefinition.NoWrap ); var cell = new TableCell ( column, value, action ); var formattingOverride = columnDefinition.FormattingTypeOverride; if (formattingOverride.HasValue) { cell.FormattingType = formattingOverride.Value; } return(cell); }
/// <summary> /// Resolves a column value for a specific query row /// </summary> /// <param name="column">The column definition</param> /// <param name="row">The query row</param> /// <returns>The value that was resolved</returns> private object ResolveColumnValue ( TableColumnDefinition column, QueryRow row ) { var value = default(object); if (false == column.IsDynamic) { value = column.ValueBinding.Resolve ( row ); } else { var dynamicColumn = (TableDynamicColumnDefinition)column; var group = dynamicColumn.ColumnGroup; var columnRowKeyValue = dynamicColumn.ColumnRowKeyValue; var valueResults = group.ValueResults; var masterKeyValue = row.FindCellValue ( group.MasterToValueQueryKeyMap.FromColumnName ); // NOTE: // We find the value rows matching the master row and then // filter these to the exact row by matching the column key. // // We are trying narrow the column value results to match // the keys from both the master and column query results. var matchingRows = valueResults.FindRows ( group.MasterToValueQueryKeyMap.ToColumnName, masterKeyValue ); var valueColumnIndex = valueResults.GetColumnIndex ( group.ColumnToValueQueryKeyMap.ToColumnName ); var matchingValueRow = default(QueryRow); if (columnRowKeyValue == null) { matchingValueRow = matchingRows.FirstOrDefault ( r => r.Cells[valueColumnIndex].Value == null ); } else { matchingValueRow = matchingRows.FirstOrDefault ( r => r.Cells[valueColumnIndex].Value != null && r.Cells[valueColumnIndex].Value.ToString().Equals ( columnRowKeyValue.ToString(), StringComparison.InvariantCultureIgnoreCase ) ); } if (matchingValueRow == null) { value = null; } else { value = column.ValueBinding.Resolve ( matchingValueRow ); } } var columnName = column.Name; if (false == _columnValueCache.ContainsKey(columnName)) { _columnValueCache.Add ( columnName, new List <object>() ); } _columnValueCache[columnName].Add(value); return(value); }