Exemplo n.º 1
0
 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));
 }
Exemplo n.º 2
0
        //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;
        }
Exemplo n.º 3
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> >();
        }
Exemplo n.º 4
0
 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];
            }
        }