Как привязать объект определенного пользователем типа данных к DetailsView?

Привет, у меня есть класс, который содержит свойство типа данных, определяемое пользователем. Я создал экземпляр этого класса. Когда я привязываю этот объект этого класса к DetailsView, он показывает все свойства, кроме свойства типа данных, определенного пользователем. Вот пример кода.

public class Customer
{
    public string CustomerName { get; set; }
    public int Age { get; set; }
    public Address CustomerAddress { get; set; }
}

Address class looks like

public class Address
{
    public string Line1 { get; set; }
    public string Line2 { get; set; }
    public string City { get; set; }
}

Creating an object of Customer class

var cust = new Customer {
               CustomerName = "abc",
               Age = 25,
               CustomerAddress = new Address{ Line1 = "abc", Line2 = "abc", City = "abc" }};

Binding cust to Details View

List<Customer> customerInfo = new List<Customer>();
customerInfo.Add(cust);
DetailsView1.DataSource = custmerInfo;
DetailsView1.DataBind();

In .aspx page 

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False">
<Fields>
    <asp:BoundField DataField="CustomerName" HeaderText="Customer Name">
    <asp:BoundField DataField="Age" HeaderText="Customer Age">
    <asp:BoundField DataField="CustomerAddress" HeaderText="Customer Address ">
</Fields>
</asp:DetailsView>

Приведенный выше код не отображает адрес клиента. Может кто-нибудь помочь мне ?


person wiki    schedule 13.12.2010    source источник


Ответы (2)


При связывании данных, если основной класс (здесь Клиент) имеет дочерний класс (здесь адрес), то для отображения свойств объекта дочернего класса нам необходимо использовать <asp:TemplateField />.

Итак, используйте пример ниже:

<asp:TemplateField HeaderText=”City”>
    <ItemTemplate>
        <asp:Label ID=”customerCity” runat=”server” 
                   Text='<%# Eval("CustomerAddress.City") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

Ожидается, что приведенный ниже код будет работать, НО это НЕ:

<asp:BoundField DataField="CustomerAddress.City" HeaderText="City" />
person R.C    schedule 24.04.2015

Я думаю, что в .NET4 вы можете:

<asp:BoundField DataField="CustomerAddress.City" HeaderText="City" />
person Yevgeni Grinberg    schedule 10.08.2015