protected override void ManageTemplateWithoutLinkedTemplates()
        {
            ExcelInterop.Range     firstCell   = currentRenderingTo;
            ExcelInterop.Worksheet worksheetTo = currentRenderingTo.Worksheet;
            int cptElements = 0;

            int nbrOfElement = bindingContextPart.ElementsToRender.Count();
            int localWidth   = partToRenderDefinition.Width * nbrOfElement;
            int localHeight  = partToRenderDefinition.Height;

            if (nbrOfElement > 0)
            {
                ExcelInterop.Range workingRange = currentRenderingTo.Resize[localHeight, localWidth];

                partToRenderDefinition.DefinitionCells.Copy(workingRange);
                currentRenderingTo = worksheetTo.Cells[currentRenderingTo.Row + localHeight, currentRenderingTo.Column + localWidth];

                for (int rowId = 0; rowId < partToRenderDefinition.Height; rowId++)
                {
                    Parent.DataRows.Add(new List <IBindingContextItem>());
                }

                foreach (IBindingContextElement contextElement in bindingContextPart.ElementsToRender)
                {
                    int cptItems = 0;
                    for (int rowId = 0; rowId < partToRenderDefinition.Height; rowId++)
                    {
                        for (int colId = 0; colId < partToRenderDefinition.Width; colId++)
                        {
                            IBindingContextItem item = partToRenderDefinition.DefinitionParts[rowId, colId] == null ? null : contextElement.BindingContextItems[cptItems++];
                            if (item != null && ((item.BindingDefinition != null && item.BindingDefinition.IsEnum && !item.BindingDefinition.IsReadOnly) || item is IExcelControl))
                            {
                                ExcelInterop.Range range = worksheetTo.Cells[firstCell.Row + rowId, firstCell.Column + colId + cptElements * partToRenderDefinition.Width];
                                if (item.BindingDefinition.IsEnum)
                                {
                                    enumManager.CreateControl(item, ref range);
                                }
                                else
                                {
                                    ((IExcelControl)item).CreateControl(range);
                                }
                                range = null;
                            }
                            Parent.DataRows[rowId].Add(item);
                        }
                    }
                    if (useDecorator && ((ExcelTemplateDefinition)this.partToRenderDefinition.Parent).Decorator != null)
                    {
                        ExcelInterop.Range elementRange = firstCell.Offset[0, cptElements];
                        elementRange = elementRange.Resize[localHeight, 1];

                        Parent.RootRenderer.RowDecorators.Add(new ExcelElementDecorator(elementRange, ((ExcelTemplateDefinition)partToRenderDefinition.Parent).Decorator, contextElement));
                    }
                    cptElements++;
                }
                workingRange = null;
                //ExcelApplication.ReleaseComObject(workingRange);
            }

            // To take into account the min number of elements to render.
            if (Parent.MinOccurencesMethod != null)
            {
                IBindingContextElement parentElement = null;
                if (bindingContextPart.ParentContext != null)
                {
                    parentElement = bindingContextPart.ParentContext.Parent;
                }

                int minElementsToRender = LinkedTemplateDefinition.ResolveMinOccurences(Parent.MinOccurencesMethod, parentElement);
                if (minElementsToRender > nbrOfElement)
                {
                    localWidth = partToRenderDefinition.Width * minElementsToRender;
                    IBindingContextItem[] toAdd = new IBindingContextItem[minElementsToRender - nbrOfElement];

                    if (Parent.DataRows.Count == 0)
                    {
                        for (int rowId = 0; rowId < partToRenderDefinition.Height; rowId++)
                        {
                            Parent.DataRows.Add(new List <IBindingContextItem>());
                        }
                    }
                    for (int rowId = 0; rowId < partToRenderDefinition.Height; rowId++)
                    {
                        Parent.DataRows[rowId].AddRange(toAdd);
                    }
                }
            }

            Width += localWidth;
            if (Height < localHeight)
            {
                Height = localHeight;
            }

            ExcelApplication.ReleaseComObject(worksheetTo);
            firstCell = null;
        }
Ejemplo n.º 2
0
        protected override void ManageTemplateWithoutLinkedTemplates()
        {
            ExcelInterop.Range     firstCell   = currentRenderingTo;
            ExcelInterop.Worksheet worksheetTo = currentRenderingTo.Worksheet;
            int cptElements = 0;

            int nbrOfElement = bindingContextPart.ElementsToRender.Count();
            int localWidth   = partToRenderDefinition.Width;
            int localHeight  = partToRenderDefinition.Height * nbrOfElement;

            if (localHeight > 0)
            {
                ExcelInterop.Range workingRange = currentRenderingTo.Resize[localHeight, localWidth];

                partToRenderDefinition.DefinitionCells.Copy(workingRange);
                currentRenderingTo = worksheetTo.Cells[currentRenderingTo.Row + localHeight, currentRenderingTo.Column + localWidth];

                foreach (IBindingContextElement contextElement in bindingContextPart.ElementsToRender)
                {
                    int cptItems = 0;
                    for (int rowId = 0; rowId < partToRenderDefinition.Height; rowId++)
                    {
                        List <IBindingContextItem> row = new List <IBindingContextItem>();
                        Parent.DataRows.Add(row);
                        for (int colId = 0; colId < partToRenderDefinition.Width; colId++)
                        {
                            IBindingContextItem item = partToRenderDefinition.DefinitionParts[rowId, colId] == null ? null : contextElement.BindingContextItems[cptItems++];
                            if (item != null)
                            {
                                if (item is ExcelBindingSearchContextItem)
                                {
                                    ExcelInterop.Range range = worksheetTo.Cells[firstCell.Row + rowId + cptElements * partToRenderDefinition.Height, firstCell.Column + colId];
                                    ((ExcelBindingSearchContextItem)item).SetRange(ref range);
                                    range = null;
                                }
                                else if (item is IExcelControl)
                                {
                                    ExcelInterop.Range range = worksheetTo.Cells[firstCell.Row + rowId + cptElements * partToRenderDefinition.Height, firstCell.Column + colId];
                                    ((IExcelControl)item).CreateControl(range);
                                    range = null;
                                }
                                else if (item.BindingDefinition != null)
                                {
                                    if (item.BindingDefinition.IsEnum && !item.BindingDefinition.IsReadOnly)
                                    {
                                        ExcelInterop.Range range = worksheetTo.Cells[firstCell.Row + rowId + cptElements * partToRenderDefinition.Height, firstCell.Column + colId];
                                        enumManager.CreateControl(item, ref range);
                                        range = null;
                                    }
                                    if (item.BindingDefinition.OnAfterRendering != null)
                                    {
                                        ExcelInterop.Range range = worksheetTo.Cells[firstCell.Row + rowId + cptElements * partToRenderDefinition.Height, firstCell.Column + colId];
                                        AddAfterRenderingAction(item.BindingDefinition, range);
                                        range = null;
                                    }
                                }
                            }
                            row.Add(item);
                        }
                    }
                    if (useDecorator && ((ExcelTemplateDefinition)partToRenderDefinition.Parent).Decorator != null)
                    {
                        ExcelInterop.Range elementRange = firstCell.Offset[cptElements, 0];
                        elementRange = elementRange.Resize[1, localWidth];

                        Parent.RootRenderer.RowDecorators.Add(new ExcelElementDecorator(elementRange, ((ExcelTemplateDefinition)partToRenderDefinition.Parent).Decorator, contextElement));
                    }
                    cptElements++;
                }
                //ExcelApplication.ReleaseComObject(workingRange);
                workingRange = null;
            }

            // To take into account the min number of elements to render.
            if (Parent.MinOccurencesMethod != null)
            {
                IBindingContextElement parentElement = null;
                if (bindingContextPart.ParentContext != null)
                {
                    parentElement = bindingContextPart.ParentContext.Parent;
                }

                int minElementsToRender = LinkedTemplateDefinition.ResolveMinOccurences(Parent.MinOccurencesMethod, parentElement);
                if (minElementsToRender > nbrOfElement)
                {
                    localHeight = partToRenderDefinition.Height * minElementsToRender;
                }
            }

            Height += localHeight;
            if (Width < localWidth)
            {
                Width = localWidth;
            }

            firstCell = null;
            ExcelApplication.ReleaseComObject(worksheetTo);
            worksheetTo = null;
        }