Я бы добавил событие DataBinding к самому дочернему повторителю:
<asp:Repeater ID="parentRepeater" runat="server">
<asp:Repeater ID="childRepeater" runat="server"
OnDataBinding="childRepeater_DataBinding" />
</asp:Repeater>
Тогда просто реализуйте это:
protected void childRepeater_DataBinding(object sender, System.EventArgs e)
{
Repeater rep = (Repeater)(sender);
int someIdFromParentDataSource = (int)(Eval("ParentID"));
// Assuming you have a function call `GetSomeData` that will return
// the data you want to bind to your child repeater.
rep.DataSource = GetSomeData(int);
rep.DataBind();
}
Я предпочитаю делать это на уровне элемента управления, а не на уровне ItemDataBound
, чтобы при необходимости удаления элементов управления или элементов в шаблонах вам не приходилось беспокоиться о поиске кода в родительских элементах управления, которые используют Это. Все становится локализованным, он сам себя контролирует. Плюс вам никогда не придется делать FindControl
.
Если вы хотите заменить элемент управления в будущем, вы можете просто удалить его, и ваш код все равно будет работать, поскольку он полностью самодостаточен. Использование ItemDataBound
может привести к тому, что ваш код все еще будет компилироваться, но падать или работать непредвиденно во время выполнения из-за его зависимости от дочерних элементов управления.