Is there a way of returning the first row (or record) visible in the grid including after the user scrolls up or down.
Yes, in order to obtain the first record in view when scrolling you can handle the RecordsInViewChanged event of the grid and use the ViewableRecords collection.