Использование ретрансляторов ASP.NET со свойствами объекта - PullRequest
1 голос
/ 30 апреля 2009

Я пытаюсь использовать объекты Repeater в ASP.NET для зацикливания свойств объекта.

Например ... У меня есть ObjectDataSource для захвата объекта "Программа" по идентификатору ...

Программа имеет такие свойства, как Program.Stakeholder и Program.Outcomes, которые представляют собой списки объектов "Заинтересованная сторона" и "Результат".

Теперь ... что я действительно хотел бы сделать, так это использовать повторители для нацеливания на эти свойства и перебирать списки, которые они содержат. Однако, насколько я знаю, мне нужно было бы создать отдельный источник данных для каждого из них, привязанный к отдельному способу получения каждого списка.

Может ли кто-нибудь предоставить лучший способ использования этих объектов Repeater или указать мне на некоторые ресурсы, которые могут помочь? Если это не имеет смысла, я могу попытаться уточнить это больше.

1 Ответ

1 голос
/ 30 апреля 2009

Использование встроенного 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.


Примечание: Весь код предоставляется как есть, и я не гарантирую, что он будет работать должным образом или даже скомпилироваться. Это просто, чтобы дать вам представление о том, что должен делать ваш код - не обязательно именно тот код, который вам нужен для решения вашей проблемы.

...