Here's a tip for HFlex grid users who fill the grid with records from a recordset using the ADO client cursor manager:
When filling the grid, while looping through the recordset, (or, if you used the DataSource or Recordset property of the grid in order to automatically fill it, you will need to make an initial loop through all grid rows), set the flex grid's RowData property to the Recordset's BookMark property.
Then in the RowColChange event, use something like:
If Val(.RowData(.Row)) > 0 Then m_rsADO.Bookmark = CDbl(.RowData(.Row))
Now the recordset should stay in sync when navigating in the grid.
To do this the other way around, when the recordset is repositioned, you can use then recordset's absolute position property and add this the the row number of the first row with a record (eliminating header rows) and call the grid's Row method.
Declaring the recordset using WithEvents also helps, because you can the reposition the grid from the recordset's MoveComplete event with one or two lines of code.