1

我有一个复杂的类,类似于:

    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

那么,请问我该如何展示这些东西呢?

非常感谢。

4

2 回答 2

3

如果您在绑定中继器时获取所需的类成员,这将变得容易得多。

rpPeople.DataSource = PeopleNearYou.Select(r => new
      {
           Pid = r.Pid,
           Universe = r.Addressess.First().Universe,
           Fullname = r.Name.Fullname
      }

现在您需要在中继器中做的就是:

<%# Eval("Universe") %>
<%# Eval("Fullname") %>
于 2011-08-05T10:56:43.607 回答
0

如果我遇到这样的复杂情况,我总是使用 ItemDataBound 事件,因为您可以获得更多控制权。例如,在您的情况下,我将在项目模板中创建一个标签,将 ItemDataBound 绑定到类似于此的代码...

void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    ((Label)e.Item.FindControl("lblFullName")).Text = ((Person)e.Item.DataItem).FullName;
}

如果您有页眉/页脚行,您也需要检查 e.Item.Type。

于 2011-08-05T10:39:57.027 回答