I am guessing that the users only have a limited choice of columns to add. I would either a) include all choices the report and then optionally display them/suppress them and rearrange the order (x position) to align correctly on the report (no gaps because you are hiding a column or b) use a stored proc that gathers all of the values and then produces a table with fixed columns and puts the data into the fixed columns.
This way, the dataset/table is always the same and Crystal is happy. To my knowledge, no version takes dynamic columns. After all, you develop against a table or set of tables, not columns.