private void AddColumns(DataTable dataTable, ICollection <WorksheetColumnDefinition> columns)
 {
     foreach (var column in columns)
     {
         WorksheetColumnDefinition columnDefinition = column;
         dataTable.Columns.Add(columnDefinition.ColumnName, columnDefinition.DataType);
     }
 }
        public bool AddDataToWorksheet <T>(string worksheetName, ICollection <T> reportables)
        {
            WorksheetDefinition worksheetDefinition;

            if (WorkSheets.ContainsKey(worksheetName))
            {
                worksheetDefinition = WorkSheets.GetValueOrDefault(worksheetName);
            }
            else
            {
                return(false);
            }

            foreach (T entity in reportables)
            {
                DataRow        row  = worksheetDefinition.Worksheet.NewRow();
                List <DataRow> rows = new List <DataRow>()
                {
                    row
                };
                foreach (var column in worksheetDefinition.WorksheetColumns.Columns)
                {
                    WorksheetColumnDefinition columnDefinition = column;
                    if (columnDefinition.DataMapping == null)
                    {
                        return(false);
                    }

                    dynamic innerEntity = ExpressionHelper.GetInnerCollection(entity, columnDefinition.InnerCollection);
                    if (!(innerEntity is IEnumerable))
                    {
                        row[columnDefinition.ColumnName] = ExpressionHelper.GetValue(innerEntity, columnDefinition);
                    }
                    else
                    {
                        IEnumerable enumerable = (IEnumerable)innerEntity;
                        rows.Remove(row);
                        foreach (dynamic item in enumerable)
                        {
                            DataRow newRow = worksheetDefinition.Worksheet.NewRow();
                            newRow.ItemArray = row.ItemArray;
                            newRow[columnDefinition.ColumnName] = ExpressionHelper.GetValue(item, columnDefinition);
                            rows.Add(newRow);
                        }
                    }
                }
                rows.ForEach(r => worksheetDefinition.Worksheet.Rows.Add(r));
            }
            return(true);
        }
Пример #3
0
        public static object GetValue <T>(T entity, WorksheetColumnDefinition columnDefinition)
        {
            Delegate compiledExpression = CompileExpression(typeof(T), columnDefinition.DataMapping.Body);

            return(compiledExpression.DynamicInvoke(entity));
        }