Список привязок <MyObject>к повторителю - PullRequest
1 голос
/ 05 августа 2011

У меня есть сложный класс, который выглядит примерно так:

    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

Итак, как бы я отобразил эти вещи, пожалуйста?

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Это будет намного проще, если вы возьмете необходимых учеников, когда будете связывать повторитель.

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

Теперь все, что вам нужно сделать в своем повторителе:

<%# Eval("Universe") %>
<%# Eval("Fullname") %>
0 голосов
/ 05 августа 2011

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

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

Вам также понадобится проверить e.Item.Type, если у вас есть строки верхнего / нижнего колонтитула.

...