在 ASP.NET 資料繫結場景中,DataBinder.Eval 是最常用的資料繫結方法。以下整理了效能最佳的三種標準寫法:
<%# DataBinder.Eval(Container.DataItem, "ColumnName") %>
<%# DataBinder.Eval(Container.DataItem, "ColumnName", null) %>
<%# DataBinder.Eval(Container, "DataItem.ColumnName", null) %>
這三種寫法在效能上表現最優,建議優先使用。
<%# Container.DataItemIndex + 1 %>
<%# DataBinder.Eval(Container.DataItem, "[n]") %>
適用於 DataRowView、DbDataRecord 或自定義類型:
<%# ((DataRowView)Container.DataItem)["ColumnName"] %>
<%# ((DataRowView)Container.DataItem).Row["ColumnName"] %>
<%# ((DbDataRecord)Container.DataItem)[0] %>
<%# (((CustomType)Container.DataItem)).Property.ToString() %>
<%# DataBinder.Eval(Container.DataItem, "UnitPrice", "${0:F2}") %>
<ItemTemplate>
<asp:Image Width="12" Height="12" Border="0" runat="server"
AlternateText='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "{0:G}") %>'
ImageUrl='<%# DataBinder.Eval(Container.DataItem, "Discontinued", "~/images/{0:G}.gif") %>' />
</ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Company_Ureg_Date", "{0:yyyy-M-d}") %>
<%# DataBinder.Eval(Container.DataItem, "DateField", "{0:d}") %>
((string)DataBinder.Eval(Container, "DataItem.P_SHIP_TIME_SBM8")).Substring(4,4)
| 指定項 | 類型 | 格式 | 輸出 (1.42) | 輸出 (-12400) |
|---|---|---|---|---|
| c | Currency | {0:c} | $1.42 | -$12,400 |
| d | Decimal | {0:d} | FormatException | -12400 |
| e | Scientific | {0:e} | 1.420000e+000 | -1.240000e+004 |
| f | Fixed point | {0:f} | 1.42 | -12400.00 |
| g | General | {0:g} | 1.42 | -12400 |
| n | Number | {0:n} | 1.42 | -12,400 |
| r | Round trip | {0:r} | 1.42 | FormatException |
| x | Hexadecimal | {0:x4} | FormatException | cf90 |
貨幣格式 {0:c} 的顯示結果取決於 Web.config 的 globalization 設定:
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
輸出:$3,000.10
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US" />
</system.web>
輸出:£3,000.10
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" uiCulture="zh-CN" />
</system.web>
輸出:¥3,000.10
也可在程式碼中直接使用 string.Format("{0:C}", price) 達成相同效果。