Использование встроенного ObjectDataSource
сопоставления отдельного источника данных для каждого элемента, вероятно, является единственным простым способом (и единственным способом, который достаточно прост, чтобы стоить усилий ...).
Требуется ли использовать ObjectDataSource
или вы можете выбрать другой способ получения данных из хранилища? Я бы порекомендовал либо использовать Entity Framework (который имхо качается), либо создавать свои собственные пользовательские типы, для которых вы получаете данные с помощью специально разработанного DAL (что намного сложнее, чем использование EF, но если вы, как некоторые, обеспокоены что EF все еще находится в зачаточном состоянии, это может быть вашим выбором).
В любом случае вы получите класс C # с именем Program
, который имеет свойства типа IEnumerable<Stakeholder>
и IEnumerable<Outcome>
с именами Stakeholders
и Outcomes
соответственно. Затем вы можете использовать их в качестве источников данных для повторителей элементов и установить их в событии ItemDataBound
для ProgramRepeater
, возможно, что-то вроде этого:
protected void ProgramRepeater_ItemDataBound(object sender, ItemDataBoundEvent e) {
Program dataItem = (Program)e.DataItem;
Repeater stakeholderRptr = (Repeater)e.Item.FindControl("ProgramRepeater");
Repeater outecomeRptr = (Repeater)e.Item.FindControl("OutcomeRepeater");
stakeholderRptr.DataSource = dataItem.Stakeholders;
stakeholderRptr.DataBind();
outecomeRptr.DataSource = dataItem.Outcomes;
outecomeRptr.DataBind();
}
Предполагается, что вы, конечно, используете ASP.Net WebForms. В ASP.Net MVC это даже проще - вы просто отправляете объект Program
на View
как объект Model
и просматриваете его Stakeholders
и Outcomes
в паре вложенных циклов for
прямо на View
.
Примечание: Весь код предоставляется как есть, и я не гарантирую, что он будет работать должным образом или даже скомпилироваться. Это просто, чтобы дать вам представление о том, что должен делать ваш код - не обязательно именно тот код, который вам нужен для решения вашей проблемы.