faccio solo una precisazione:
un DataSet è un "contenitore" di DataTable (permettetemi il termine).
In questo caso funziona poiché il DataSet viene creato con una sola DataTable, di conseguenza l'assegnazione alla proprietà datasource prende la prima (e unica) tabella presente:
viceversa se il DataSet fosse più complesso.codice:rpt.DataSource = ds;
Se la tua funzione restituisce una sola tabella e non necessita di altro (ovvero viene usata solo in questo contesto o simile), fai che restituire direttamente un DataTable alla funzione.