Here you create a new data table
every time this method is called, so all rows are lost.
DataTable dt = new DataTable();
You should separate the table creation and row adding to different methods so that the table is created
once and then the rows are added to it.