something like this might work.
Measure page height;
subtract top/bottom margin; table height (minus the last row);
set the height of the row with the remainder if any.
This method here should be a good guideline to get the height of the row, and it should also show you how to get the table height
Code:
public static int GetRowHeight(Table table)
{
if(table== null || table.Rows.Count == 0)
return 0f; // if empty the height is 0;
// create a document to dump the objects that need measuring
var docAux = new Document();
var tableAux = doc.AddTable(); // Table to put the row that need to be measured
tableAux.TopPadding = tableAux.BottomPadding = tableAux.LeftPadding = tableAux.RightPadding = 0;
table.Columns = table.Columns.Clone(); // we need to set the columns, not sure if this works
var row = (Row)table.Rows.LastObject; // get the last row of table
table.Add(row.Clone()) // add the row to the aux table, not sure if this works either, but you should get the ideia
// render the document
MigraDocumentRenderer _renderer = new MigraDocumentRenderer(docAux);
_renderer.PrepareDocument(); // this method should calculate the heights and widths of the objects.
// get the objects
var docObjects = _renderer.GetDocumentObjectsFromPage(1);
var info = _renderer.GetRenderInfoFromPage(1);
double height = 0;
// Loop the objects, that in this case is only 1 row
for (int i = 0; i < docObjects.Length; ++i)
{
// this if isn't really necessary, but I'm putting it here anyways in case there's trash,
// or you want to measure other type i.e: Paragraphs, Images, etc...
// note that the tableAux only has the row that you want to measure, this means, that if the table has 0 padding,
// the ContentArea.Height here should be pretty close to the the row height.
if (docObjects[i] is MigraTable)
{
var tableInfo = (MigraDoc.Rendering.TableRenderInfo)info[i];
height += tableInfo.LayoutInfo.ContentArea.Height;
}
}
// I return int just because I like my heights being integers, change if you want
return Double.IsNaN(height) ? 0 : Convert.ToInt32(height);
}
So you could do something akin to this:
Code:
Document doc = new Document();
...
// Use the PageSetup of the section your working with and not the one of the Doc
var sec = doc.LastSection;
// Get the Height and width of the page
Unit width, height;
PageSetup.GetPageSize(sec.PageFormat, out width, out height);
// Get the height of the table
int tableHeight = MethodThatGetsTableHeight(Params...);
// Get the height of last Row of the table
int rowHeight = GetRowHeight(sec.LastTable);
// The height of both margins combined
int margins = Convert.ToInt32(sec.PageSetup.TopMargin + sec.PageSetup.BottomMargin);
// Calculate the leftover space
var lastRowHeight = height - (margins + (tableHeight - rowHeight));
// now set the height of the last row
....
I have not written this code in a code editor so it should have errors, but still, it should help you on what to do.