I got round this by adding an OnKeyPress event to the data grid and forcing the dataset .Post for the return or tab key, which were effectively exiting the cell anyway.
.Post
if (ord(Key) = VK_RETURN) or (ord(Key) = VK_TAB) then ClientDataSet.Post;