Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }