Ein kleiner Nachtrag: sinnvoll ist es, gleich zu Beginn zu schauen, ob die aktuelle Seite, die per QueryString übergeben wurde, wenn sie denn vom Format her korrekt ist, überhaupt im Range liegt:
int page;
int total = GridView1.PageCount;
if (!int.TryParse(Request.QueryString["Page"], out page) || page > total)
page = 0;
else
if (page < 0)
page = 0;
else
page--;
Im praktischen Einsatz kann man das Ganze übrigens hier sehen, da habe ich es eben eingebaut:
http://www.dotnetjob.de/Stellenangebote-Stellengesuche-Archiv.aspx