/// <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];
}