Hi,
My humble opinion on this: I think (without trying) that, when using "retrieve-rows as needed" your dw_1.RowCount() is always only going to report the amount of rows retrieved "so far".
I'm not sure about Scrollpositions, like Ren'e says, it's definitely worth a try, but ... based upon vague memories to the last time I used it, I think the simplest solution would be to check on whether the last-visible-row equals a previously read value of select count(*) with embedded SQL. (previous to having done retrieve and adding or deducing insertrows, importrows, delete rows, etc).
If you have lots of these dw's, you could bake this select count() into the sqlPreview event, but you'd still have to sum and detract values when inserting and deleting rows. If that's too complicated or messy, you could also opt for doing the select count in the scroll event itself, but only when the lastvisible row = the this.RowCount() and then do the SELECT count() check to see if it's "really the end". :)
Most probably the scroll event isn't even fired anymore, once you've really scrolled down to the last possibly retrieved row. I'm not sure if there's something like a ScrollOut event like there's tabout for tabbing.