[英]Using ASP.NET Repeaters with Object Properties
我正在尝试使用ASP.NET的Repeater对象来遍历对象的属性。
例如...我有一个ObjectDataSource可以通过ID来获取对象“ Program” ...
Program具有诸如Program.Stakeholders和Program.Outcomes之类的属性,它们是“利益相关者”和“结果”对象的列表。
现在...我真正想做的是使用中继器来定位这些属性,并遍历它们包含的列表。 但是,据我所知,我必须为每个数据源设置一个单独的数据源,并绑定到用于检索每个列表的单独方法。
任何人都可以提供一种更好的方式来使用这些Repeater对象,或者向我指出一些会有所帮助的资源吗? 如果这没有意义,我可以尝试进一步澄清。
使用内置的ObjectDataSource
为每个项目映射一个单独的数据源可能是唯一的直接方法(而且唯一的方法很容易值得付出努力...)。
是使用ObjectDataSource
的要求,还是可以选择其他方法从存储中获取数据? 我建议您使用Entity Framework(imho摇动)或创建您自己的自定义类型,以使用自定义设计的DAL向其获取数据(这比使用EF的工作要多得多,但是如果您像某些人那样担心EF仍处于起步阶段,这可能是您的选择)。
无论哪种情况,您都将得到一个名为Program
的C#类,该类具有IEnumerable<Stakeholder>
和IEnumerable<Outcome>
类型的属性,分别称为Stakeholders
和Outcomes
。 然后,您可以将它们用作重复项的数据源,并在ProgramRepeater
的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
对象作为Model
对象发送到View
,并在View
上直接在几个嵌套的for
循环中遍历其Stakeholders
众和Outcomes
。
注意:所有代码均按原样提供,我不保证它会按预期运行甚至编译。 只是为了让您了解使代码执行什么操作-不一定是解决问题所需的确切代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.