Dynamically creating controls is a complex issue; one that is best avoided.
Your specific problem is probably that the dynamically created controls are not loaded during the Init or Load phases of the page lifecycle. When they are not; ASP.NET will not be able to "find" then and dispatch the events that they may have posted back with. This problem can be remidied by ensuring that the controls are loaded during the Load phase. If they are generated from a table in the database, simply make sure this is where they are inserted.
If they are truly being inserted dynamically you need to record the fact that they were inserted in the page viewstate, read this viewstate during Load and recreate the controls based on this information.
As you can see, this is rather complex and requires a good understanding of the page lifecycle.
A simpler approach could be to always insert all of the possible controls for each "question", but simply hit the "Visible" switch (and perhaps even the "EnableViewState" switch to minimize viewstate pressure) for the irrelevant controls.