2010-12-13 5 views
2

안녕하세요 사용자 정의 데이터 형식 속성이 들어있는 클래스가 있습니다. 그 클래스의 인스턴스를 만들었습니다. 해당 클래스의 해당 객체를 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> 

위 코드에는 고객 주소가 표시되지 않습니다. 아무도 나를 도울 수 있습니까?

답변

0

데이터를 바인딩하는 동안 기본 클래스 (여기 고객)에 하위 클래스 (여기 주소)가있는 경우 하위 클래스 개체 속성을 표시하려면 <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" /> 
0

나는 당신이 할 수있는 .NET4 생각 :

<asp:BoundField DataField="CustomerAddress.City" HeaderText="City" />