After I requery the recordset the grid does not reflect any changes in the row count, it even crashes sometimes.

This can happen when you call CRecordset::Requery() directly.

It is very important that you have to call Requery()for the grid and not for the recordset.

Example:

void CMyRecordView::OnRecordRequery()
{
   BOOL bLock = LockUpdate();
   SetTopRow(1);
   MoveCurrentCellEx(GX_TOPLEFT);
   Requery();
   LockUpdate(bLock);
   Redraw();
}