The built-in recurrence support in the other controls (Calendar, Month, Scheduler) allows you to store the recurring events as a single event (with a rule assigned to it). This rule will be expanded during loading and the individual occurrences will be generated.
This approach is used because it allows using a rule that repeats indefinitely. You don't have to store all occurrences (possibly even thousands or more) in the database.
This also means the generated events don't have their own IDs (they do not have a corresponding DB record).
However, the Gantt Chart control works differently:
1. The timeline is always definite (the project has start and end).
2. You want every task to have its own ID because it can't work without it - it's needed for keeping the order of tasks, to store task dependencies, etc.
So you need a special record for every occurrence. You can use the built-in RecurrenceExpander class to generate occurrences from a rule.
The recurrence support is never a simple solution. It always involves a lot of manual work and it can get very, very complex. In case of the Gantt chart, there is even smaller room for built-in support. At this moment it simply assumes that you will supply all tasks in the data source, one item per task.