Try registering the events before calling set_table_for_first_display and add this after calling the ALV:
SET HANDLER g_application->handle_tf_user_command FOR
tf_grid.
SET HANDLER g_application->handle_tf_data_changed FOR
tf_grid.
SET HANDLER g_application->handle_tf_data_changed_finish FOR
tf_grid.
I know, ALVs can make you nuts...