/// <summary> /// Updates the table row additions in the underlying table object /// </summary> private void updateRowAdditionsInternal() { // correct table : fill empty cells/ parse table in table var prevRows = Rows; var rowNumber = 0; var groupNumber = 0; bool groupChange; var firstDataRow = Table.LastHeaderRow + 1; Cell cell; PdfCell currentCell; var newCells = new ArrayList(); var rows = Table.Size + 1; var offsets = new float[rows]; for (var i = 0; i < rows; i++) { offsets[i] = Bottom; } // loop over all the rows foreach (Row row in Table) { groupChange = false; if (row.IsEmpty()) { if (rowNumber < rows - 1 && offsets[rowNumber + 1] > offsets[rowNumber]) { offsets[rowNumber + 1] = offsets[rowNumber]; } } else { for (var i = 0; i < row.Columns; i++) { cell = (Cell)row.GetCell(i); if (cell != null) { currentCell = new PdfCell(cell, rowNumber + prevRows, Positions[i], Positions[i + cell.Colspan], offsets[rowNumber], Cellspacing, Cellpadding); if (rowNumber < firstDataRow) { currentCell.SetHeader(); HeaderCells.Add(currentCell); if (!Table.NotAddedYet) { continue; } } try { if (offsets[rowNumber] - currentCell.Height - Cellpadding < offsets[rowNumber + currentCell.Rowspan]) { offsets[rowNumber + currentCell.Rowspan] = offsets[rowNumber] - currentCell.Height - Cellpadding; } } catch (ArgumentOutOfRangeException) { if (offsets[rowNumber] - currentCell.Height < offsets[rows - 1]) { offsets[rows - 1] = offsets[rowNumber] - currentCell.Height; } } currentCell.GroupNumber = groupNumber; groupChange |= cell.GroupChange; newCells.Add(currentCell); } } } rowNumber++; if (groupChange) { groupNumber++; } } // loop over all the cells var n = newCells.Count; for (var i = 0; i < n; i++) { currentCell = (PdfCell)newCells[i]; try { currentCell.Bottom = offsets[currentCell.Rownumber - prevRows + currentCell.Rowspan]; } catch (ArgumentOutOfRangeException) { currentCell.Bottom = offsets[rows - 1]; } } Cells.AddRange(newCells); Bottom = offsets[rows - 1]; }
/** * Updates the table row additions in the underlying table object */ private void UpdateRowAdditionsInternal() { // correct table : fill empty cells/ parse table in table int prevRows = Rows; int rowNumber = 0; int groupNumber = 0; bool groupChange; int firstDataRow = table.FirstDataRow; Cell cell; PdfCell currentCell; ArrayList newCells = new ArrayList(); int rows = table.Size + 1; float[] offsets = new float[rows]; for (int i = 0; i < rows; i++) { offsets[i] = Bottom; } // loop over all the rows foreach (Row row in table) { groupChange = false; if (row.IsEmpty()) { if (rowNumber < rows - 1 && offsets[rowNumber + 1] > offsets[rowNumber]) offsets[rowNumber + 1] = offsets[rowNumber]; } else { for (int i = 0; i < row.Columns; i++) { cell = (Cell) row.GetCell(i); if (cell != null) { currentCell = new PdfCell(cell, rowNumber+prevRows, positions[i], positions[i + cell.Colspan], offsets[rowNumber], Cellspacing, Cellpadding); try { if (offsets[rowNumber] - currentCell.Height - Cellpadding < offsets[rowNumber + currentCell.Rowspan]) { offsets[rowNumber + currentCell.Rowspan] = offsets[rowNumber] - currentCell.Height - Cellpadding; } } catch (ArgumentOutOfRangeException) { if (offsets[rowNumber] - currentCell.Height < offsets[rows - 1]) { offsets[rows - 1] = offsets[rowNumber] - currentCell.Height; } } if (rowNumber < firstDataRow) { currentCell.SetHeader(); headercells.Add(currentCell); } currentCell.GroupNumber = groupNumber; groupChange |= cell.GroupChange; newCells.Add(currentCell); } } } rowNumber++; if ( groupChange ) groupNumber++; } // loop over all the cells int n = newCells.Count; for (int i = 0; i < n; i++) { currentCell = (PdfCell) newCells[i]; try { currentCell.Bottom = offsets[currentCell.Rownumber-prevRows + currentCell.Rowspan]; } catch (ArgumentOutOfRangeException) { currentCell.Bottom = offsets[rows - 1]; } } cells.AddRange(newCells); Bottom = offsets[rows - 1]; }