Personally, I'd rather work with a list than work with a portal that is "list looking" any day.
However, some things come to mind that I think (hope?) you'll find helpful.
Regarding getting the next row's key, check out GetNthRecord. You could use, for example, GetNthRecord ( portalTable::ID ; get ( activeportalrownumber ) + 1 )
You might also not be aware that an onObjectEnter script trigger on a portal will fire any time a new row is entered, whether by clicking or by tabbing into the row. Perhaps that's a better way to capture the current key.