The user never wants to see 100,000 rows of data at a time. The control you're using can be used in a
virtual mode. In this way, you will fetch only the data which could be visible on one screen, ideally, 3 or so times more. If a user wants to look at previous/next page, it will be a situation of
cache hit, so the result will be rendered almost immediately. In worst cases, the user wants to scroll far away; and it will be a total
cache miss, but re-fetching of full data will not take too long time as this is just another 3+ screens of data. You can devise more sophisticated caching mechanism, but the idea will be pretty much the same,
http://en.wikipedia.org/wiki/Cache[
^].
—SA