You are using wrong way to fill datatable using Reader object. You don't need while to fill it like this OR you can use while but then extract specific values and add them to datatable till loop goes on, ones loop ends assign datatable to grid.
Try this way instead:
using (SqlCommand myCommand = new SqlCommand(sql, myConnection))
{
myConnection.Open();
using (SqlDataReader myReader = myCommand.ExecuteReader())
{
DataTable myTable = new DataTable();
myTable.Load(myReader);
myConnection.Close();
return myTable;
}
}