2009-05-18 5 views
1

저는 ASP.Net 2.0에서 Databinding을 사용하고 있으며 Eval 명령과 관련된 문제가 있습니다.DataBinding에서 사용하기 위해 개체에 ToString을 재정의하십시오.

은 내가 데이터 바인딩 해요 클래스를 가지고, 그것은 다음과 같습니다

public class Address 
{ 
    public string Street; 
    public string City; 
    public string Country; 
    public new string ToString() 
    { 
     return String.Format("{0}, {1}, {2}", Street, City, Country); 
    } 
} 

그리고 다른 클래스 (I가 데이터 바인딩 해요 하나) : 때

public class Situation 
{ 
    public Address ObjAddress; 
    public string OtherInformation; 
} 

지금을, I 데이터 바인딩 된 컨트롤을 가지고있다.

<asp:DetailsView ID="dvSituation" DataSourceID="dataSourceThatPullsSituations" AutoGenerateRows="false"runat="server"> 
<EmptyDataTemplate> 
    No situation selected 
</EmptyDataTemplate> 
<Fields> 
    <asp:BoundField HeaderText="Other data" DataField="OtherInformation" /> 
    <asp:TemplateField> 
     <HeaderTemplate> 
      Address 
     </HeaderTemplate> 
     <ItemTemplate> 
      <%-- This will work --%> 
      <%# ((Situation)Container.DataItem).ObjAddress.ToString() %> 
      <%-- This won't --%> 
      <%# Eval("ObjAddress") %> 
     </ItemTemplate> 
    </asp:TemplateField> 
</Fields> 
</asp:DetailsView> 

이 필드가 평가 될 때 내 ToString() 클래스가 호출되지 않는 이유는 무엇입니까? 그 eval이 실행될 때 형식 이름을 얻습니다. 사용하는 대신

답변

4

: ToString 메서드에서

public override string ToString() 
1

사용 override 키워드 대신 new :

public new string ToString() 

재정 키워드를 사용합니다.

예 :

0

그래서 나는 새로운 키워드가 수퍼 클래스 인 것처럼 객체가 호출 된 경우에도 구현을 오버라이드 (override) 할 인상이었다

Address test = new Address(); 
Object aFurtherTest = test; 
aFurtherTest.ToString(); 

새로운 키워드를 사용하는 저를 필요로한다. 이 키워드가 실제로하는 일은 기본 클래스에 정의 된 것과 동일한 이름을 가진 메소드를 효과적으로 생성하는 것입니다.

위의 예제에서 키워드를 사용하면 개체의 ToString 메서드가 생깁니다. 즉,이 클래스를 기본 클래스 또는 하위 클래스로 처리하는 유형에 따라 ToString 메서드는 다른 메서드를 호출합니다.

분명히 내가 RTFM을 가져야하는 경우 ...

관련 문제