Io cambierei leggermente il punto di vista.
Al posto di "spezzare" un DataGrid su più pagine, io scriverei un datagrid per ogni pagina.

Si decidono le righe stampabili per pagina, si sceglie la veste grafica, poi si costruisce un controllo utente che contiene un datagrid.

La pagina che si deve stampare fa una specie di paginazione, includendo da codice, tanti controlli ascx quante sono le pagine da stampare.

Il salto pagina si ottiene per esempio con l'attributo PAGE-BREAK-AFTER: always;


ps. sono stato un po' vago, ma l'idea mi pare interessante, perciò a te l'implementazione, in c# suppongo