1

我正在尝试使用 ASP.NET 的 Repeater 对象来循环对象的属性。

例如...我有一个 ObjectDataSource 来按 ID 抓取对象“程序”...

Program 具有诸如 Program.Stakeholders 和 Program.Outcomes 之类的属性,它们是“Stakeholder”和“Outcome”对象的列表。

现在......我真正想做的是使用中继器来定位这些属性并遍历它们包含的列表。但是,据我所知,我必须为每个数据源设置一个单独的数据源,并绑定到一个单独的方法来检索每个列表。

谁能提供更好的方法来使用这些中继器对象,或者向我指出一些有用的资源?如果这没有意义,我可以尝试进一步澄清。

4

1 回答 1

1

使用内置ObjectDataSource映射为每个项目建立一个单独的数据源可能是唯一直接的方法(也是唯一值得付出努力的简单方法......)。

这是您使用 的要求ObjectDataSource,还是您可以选择不同的方式从存储中获取数据?我建议使用实体框架(恕我直言)或创建您自己的自定义类型,您可以使用自定义设计的 DAL 获取数据(这比使用 EF 做更多的工作,但如果您像某些人一样担心EF 仍处于起步阶段,这可能是您的选择)。

无论哪种情况,您最终都会得到一个名为 的 C# 类Program,它分别具有 typeIEnumerable<Stakeholder>IEnumerable<Outcome>calledStakeholders和的属性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对象发送到ViewModel然后直接在.StakeholdersOutcomesforView


Note: All code is provided as is, and I do not guarantee that it will run as expected or even compile. It is just to give you an idea of what to make your code do - not necessarily the exact code you need to solve your problem.

于 2009-04-29T21:32:31.100 回答