The "dt" in here
{
DataTable dt = new DataTable();
querySaveStaff.Fill(dt);
}
Only exists in that code block (between the { } ), so you create dt, populate it, then throw it away. So this code here;
PdfPTable pdfTable = new PdfPTable(dt.Columns.Count);
is using the "dt" defined here
private static DataTable dt = new DataTable();
That dt remains untouched so has zero columns and no data. Change the code in slanjeizvestaja to use the dt defined at the top rather than creating a second "dt"
{
dt = new DataTable();
querySaveStaff.Fill(dt);
}