Two very important rules if you work with dynamically added controls:
Recreate the controls!
Recreate every single control on PostBack if you want to react on any events. If you "forget" just one control, your ViewState may become invalid and no event will be fired or the page might behave as if there was no PostBack.
Recreate controls as early as possible!
Additionally, if you want to add controls to a page, usually you would add them in Page_Load-method. This is early enough if you don't need to capture events of the dynamically added controls. But if you want to capture events, you'll have to recreate them as early as possible. The most promising method is Page_Init, which is called before Page_Load and before controls fire their events. So: Use Page_Init instead of Page_Load when adding controls with events to your page.