2009-05-18 67 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); 
    } 
} 

而另一類(一個我數據綁定):

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

現在,當我有一個數據綁定控制,例如

<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時被調用?當eval運行時,我只是獲取類型名稱。

回答

4

而不是使用:

public new string ToString() 

使用覆蓋關鍵字:

public override string ToString() 
0

所以我的印象是關鍵字會覆蓋實現,即使對象是所謂的,就好像是一個超下:

例如

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

需要我使用關鍵字。這個關鍵字實際上做的是有效地創建一個與基類中定義的名稱相同的方法。

因此,如果我用新的關鍵字在上面的例子中,我會得到對象的ToString方法。換句話說,根據我將它視爲(基類或子類)的類型,ToString方法將調用不同的方法。

很顯然,我應該有RTFM的情況...

相關問題