A data reader only moves forward. You will have to use a dataset and track the index yourself....when they open the page they will be at index 0 (the first record of the table in the dataset), moving forward you set the index to 1 (now the second record is displayed), moving backward you set the index back to 0 (now the previous record is displayed), and so on...the syntax would be something like
myRow = myDataSet.Tables("TableWhatever")(myIndex)
And then your controls would bind to the columns of that row.
Also, if you are leaving a data reader open while a user is navigating forward then you are using the data reader incorrectly. A data reader should be used to fill a data set, or a collection of objects, or anything other than for navigational purpose of data. ADO.NET is disconnected data, that is the beauty of it, the DataSet represents the source data and allows you to navigate and manipulate it without tying up database connections (which are limited and in the real world a DBA will kick you to the curb if your keeping a connection open just for navigation purposes). Follow my instructions in this post and the previous and I gaurantee it will work for you.