Exemplo n.º 1
0
        private void PrintDetailInternal(ReportPageEventArgs rpea, DataNavigator nav)
        {
            Rectangle sectionRect;

            base.PrintDetail(null, rpea);

            // no loop if there is no data
            if (!nav.HasMoreData)
            {
                rpea.PrintPageEventArgs.HasMorePages = false;
                return;
            }

            ITableContainer tableContainer = base.CurrentSection.Items[0] as ITableContainer;

            // branch to render table's etc
            if (tableContainer != null)
            {
                tableContainer.DataNavigator = nav;
                tableContainer.Parent        = base.CurrentSection;
                if (rpea.SinglePage.PageNumber == 1)
                {
                    tableContainer.StartLayoutAt(base.Sections[2]);
                }
                else
                {
                    tableContainer.StartLayoutAt(base.Sections[0]);
                }


                base.RenderTable(base.CurrentSection, tableContainer, rpea);

                this.ReportDocument.DetailsDone = true;
            }

            else
            {
                // first element
                if (base.SinglePage.PageNumber == 1)
                {
                    this.dataNavigator.MoveNext();
                }

                do
                {
                    ISimpleContainer simpleContainer = base.CurrentSection.Items[0] as ISimpleContainer;

                    if (simpleContainer != null)
                    {
                        nav.Fill(simpleContainer.Items);
                    }
                    else
                    {
                        nav.Fill(base.CurrentSection.Items);
                    }

                    sectionRect = new Rectangle(rpea.PrintPageEventArgs.MarginBounds.Left,
                                                base.CurrentSection.SectionOffset,
                                                rpea.PrintPageEventArgs.MarginBounds.Width,
                                                base.CurrentSection.Size.Height);


                    if (PrintHelper.IsPageFull(sectionRect, base.SectionBounds))
                    {
                        PerformPageBreak(rpea);
                        return;
                    }

                    Point currentPosition = base.RenderItems(rpea);


                    if (nav.CurrentRow < nav.Count - 1)
                    {
                        if (base.CurrentSection.PageBreakAfter)
                        {
                            PerformPageBreak(rpea);
                            return;
                        }
                    }

                    base.CurrentSection.SectionOffset = currentPosition.Y;

                    rpea.LocationAfterDraw = new Point(rpea.LocationAfterDraw.X,
                                                       currentPosition.Y);
                }while (nav.MoveNext());
                this.ReportDocument.DetailsDone = true;
            }

            rpea.LocationAfterDraw = new Point(rpea.LocationAfterDraw.X, rpea.LocationAfterDraw.Y + 5);
            if (!PrintHelper.IsRoomForFooter(base.SectionBounds, rpea.LocationAfterDraw))
            {
                AbstractRenderer.PageBreak(rpea);
            }
        }