我有一个复杂的类,如:
public class Person
{
public int Pid;
IList<Address> Addressess;
public Name Name;
public Name PartnerName;
Person(int id)
{
Addressess = new List<Address>();
}
}
public class Address
{
public string HouseName;
public string street;
public string country;
public string universe;
public string galaxy;
}
public class Name
{
public string Firstname;
public string Lastname;
public string Fullname { get { return Firstname + " " + Lastname; } }
}
所以,现在,当我像这样绑定转发器时:
rpPeople.DataSource = PeopleNearYou; //this is a List<Person>();
在实际的转发器中,我想展示细节。要访问Pid
,我需要做的就是:
<%# Eval("Pid") %>
现在,我无法弄清楚如何在转发器中访问全名
<%# Eval("Fullname") %> //error, fullname not found
另外,我想只显示第一个地址 而我不能这样做
<%# Eval("Address").First().Universe %> //red, glarring error. can't figure out how
那么,我该如何展示这些东西?
非常感谢。
答案 0 :(得分:3)
如果在绑定转发器时抓取所需的类成员,这将更加容易。
rpPeople.DataSource = PeopleNearYou.Select(r => new
{
Pid = r.Pid,
Universe = r.Addressess.First().Universe,
Fullname = r.Name.Fullname
}
现在您需要在转发器中执行的操作是:
<%# Eval("Universe") %>
<%# Eval("Fullname") %>
答案 1 :(得分:0)
如果我遇到这样复杂的情况,我总是使用ItemDataBound事件,因为你可以获得更多的控制权。例如,在你的情况下,我会在项目模板中创建一个标签,将ItemDataBound绑定到类似于此的代码...
void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
((Label)e.Item.FindControl("lblFullName")).Text = ((Person)e.Item.DataItem).FullName;
}
如果您有页眉/页脚行,也需要检查e.Item.Type。