public static ExcelPartRenderer CreateInstance(ExcelRenderer parent, ExcelTemplateDefinitionPart part, IBindingContextPart bindingContextPart, ExcelInterop.Range firstOutputCell, bool useDecorator) { if (part.Parent.Orientation == Orientation.Vertical) { return(new ExcelPartVerticalRenderer(parent, part, bindingContextPart, firstOutputCell, useDecorator)); } return(new ExcelPartHorozontalRenderer(parent, part, bindingContextPart, firstOutputCell, useDecorator)); }
//public bool isExpander = false; #endregion #region .ctors and factories protected ExcelPartRenderer(ExcelRenderer parent, ExcelTemplateDefinitionPart part, IBindingContextPart bindingContextPart, ExcelInterop.Range firstOutputCell, bool useDecorator) { Parent = parent; partToRenderDefinition = part; this.bindingContextPart = bindingContextPart; this.useDecorator = useDecorator; currentRenderingFrom = partToRenderDefinition.DefinitionFirstCell; firstRangeTo = firstOutputCell; elementFirstRangeTo = firstOutputCell; currentRenderingTo = firstOutputCell; Height = Width = 0; }
public ExcelRenderer(ExcelRenderer parent, ITemplateDefinition templateDefinition, IBindingContext bindingContext, ExcelInterop.Range firstOutputCell, MethodInfo minOccurencesMethod) { NestedRenderer = new List <ExcelRenderer>(); if (parent == null) { RootRenderer = this as ExcelRootRenderer; } else { RootRenderer = parent.RootRenderer; Parent = parent; } this.templateDefinition = templateDefinition; this.bindingContext = bindingContext; this.firstOutputCell = firstOutputCell; MinOccurencesMethod = minOccurencesMethod; DataRows = new List <List <IBindingContextItem> >(); }
public void RegisterNestedRenderer(ExcelRenderer nestedRenderer) { NestedRenderer.Add(nestedRenderer); }
public ExcelPartHorozontalRenderer(ExcelRenderer parent, ExcelTemplateDefinitionPart part, IBindingContextPart bindingContextPart, ExcelInterop.Range firstOutputCell, bool useDecorator) : base(parent, part, bindingContextPart, firstOutputCell, useDecorator) { }
private void RenderLink(RenderingContext renderingContext, IBindingContext linkedBindingContext, ExcelInterop.Worksheet worksheetTo) { ExcelRenderer linkedRenderer = new ExcelRenderer(Parent, renderingContext.LinkedTemplateDefinition.TemplateDefinition, linkedBindingContext, currentRenderingTo, renderingContext.LinkedTemplateDefinition.MinOccurencesMethod); Parent.RegisterNestedRenderer(linkedRenderer); linkedRenderer.Render(); if (linkedRenderer.RenderedArea != null) { renderingContext.LinkedViewRenderedWidth = linkedRenderer.Width; if (!renderingContext.RowAdded) { AddRow(renderingContext); renderingContext.RowAdded = true; } renderingContext.DataRow.AddRange(linkedRenderer.DataRows[0]); //for (int i = 1; i < linkedRenderer.DataRows.Count; i++) for (int i = 1; i < linkedRenderer.Height; i++) { List <IBindingContextItem> rowToUse; if (i >= renderingContext.CurrentRowHeight) { rowToUse = renderingContext.CurrentRowWidth > 0 ? new List <IBindingContextItem>(new IBindingContextItem[renderingContext.CurrentRowWidth]) : new List <IBindingContextItem>(); Parent.DataRows.Add(rowToUse); } else { rowToUse = Parent.DataRows[i + renderingContext.RefRow]; if (rowToUse.Count < renderingContext.CurrentRowWidth) { rowToUse.AddRange(new IBindingContextItem[renderingContext.CurrentRowWidth - rowToUse.Count]); } } rowToUse.AddRange(linkedRenderer.DataRows[i]); } // To take the multilines into account if (linkedRenderer.Height > linkedRenderer.DataRows.Count) { for (int cpt = linkedRenderer.DataRows.Count + 1; cpt <= linkedRenderer.Height; cpt++) { //Parent.DataRow.Add(new List<IBindingContextItem>(new IBindingContextItem[0])); List <IBindingContextItem> rowToUse; if (cpt >= renderingContext.CurrentRowHeight) { rowToUse = renderingContext.CurrentRowWidth > 0 ? new List <IBindingContextItem>(new IBindingContextItem[renderingContext.CurrentRowWidth]) : new List <IBindingContextItem>(); Parent.DataRows.Add(rowToUse); } else { rowToUse = Parent.DataRows[cpt + renderingContext.RefRow]; if (rowToUse.Count < renderingContext.CurrentRowWidth) { rowToUse.AddRange(new IBindingContextItem[renderingContext.CurrentRowWidth - rowToUse.Count]); } } rowToUse.AddRange(new IBindingContextItem[linkedRenderer.Width]); } } if (renderingContext.CurrentRowHeight < linkedRenderer.Height) { renderingContext.CurrentRowHeight = linkedRenderer.Height; } currentRenderingTo = worksheetTo.Cells[currentRenderingTo.Row, currentRenderingTo.Column + linkedRenderer.Width]; } }