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

また、First Addressだけを表示したいのですが、それができません。

<%# 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 に答える