public void RunPageHeader(Pages pgs, Row frow, bool bFirst, TableGroup stoptg) { // Do the table headers bool isEmpty = pgs.CurrentPage.IsEmpty(); if (_Header != null && (_Header.RepeatOnNewPage || bFirst)) { _Header.RunPage(pgs, frow); if (isEmpty) { pgs.CurrentPage.SetEmpty(); // Consider this empty of data } } if (bFirst) // the very first time we'll output the header (and not consider page empty) { return; } if (_TableGroups == null) { pgs.CurrentPage.SetEmpty(); // Consider this empty of data return; } // Do the group headers foreach (TableGroup tg in _TableGroups.Items) { if (stoptg != null && tg == stoptg) { break; } if (tg.Header != null) { if (tg.Header.RepeatOnNewPage) { tg.Header.RunPage(pgs, frow); } } } pgs.CurrentPage.SetEmpty(); // Consider this empty of data return; }
private void RunRecursiveGroupsPage(Pages pgs, TableWorkClass wc) { List <Row> rows = wc.Data.Data; Row r; // Get any header/footer information for use in loop Header header = null; Footer footer = null; TableGroup tg = wc.RecursiveGroup.Parent as TableGroup; if (tg != null) { header = tg.Header; footer = tg.Footer; } bool bHeader = true; for (int iRow = 0; iRow < rows.Count; iRow++) { r = rows[iRow]; wc.Data.CurrentGroups[0] = r.GroupEntry; wc.GroupNestCount = r.GroupEntry.EndRow - r.GroupEntry.StartRow; if (bHeader) { bHeader = false; if (header != null) { Page p = pgs.CurrentPage; // this can change after running a row float height = p.YOffset + header.HeightOfRows(pgs, r); if (height > pgs.BottomOfPage) { p = RunPageNew(pgs, p); RunPageHeader(pgs, r, false, null); if (!header.RepeatOnNewPage) { header.RunPage(pgs, r); } } else { header.RunPage(pgs, r); } } } // determine need for group headers and/or footers bool bFooter = false; float footerHeight = 0; if (iRow < rows.Count - 1) { Row r2 = rows[iRow + 1]; if (r.Level > r2.Level) { if (footer != null) { bFooter = true; footerHeight = footer.HeightOfRows(pgs, r); } } else if (r.Level < r2.Level) { bHeader = true; } } if (_Details != null) { _Details.RunPage(pgs, wc.Data, iRow, iRow, footerHeight); } // and output the footer if needed if (bFooter) { footer.RunPage(pgs, r); } } if (footer != null) { footer.RunPage(pgs, rows[rows.Count - 1] as Row); } }