在 GridView、DetailsView、FormView 等資料繫結控制項中,透過 DataFormatString 屬性配合 HtmlEncode="false" 可靈活控制欄位顯示格式。本文整理常用格式字串對照表,並說明套用方式與注意事項。
| 類型 | 格式字串 | 範例輸出 | 說明 |
|---|---|---|---|
| 數字 | {0:N2} | 1,234.56 | 千分位分隔,2 位小數 |
| {0:N0} | 1,235 | 千分位分隔,無小數(四捨五入) | |
| 貨幣 | {0:C2} | $1,234.56 | 依系統文化特性顯示貨幣符號(en-US 為 $) |
| {0:C4} | $1,234.5600 | 4 位小數 | |
| {0:C} | $1,234.56 | 預設 2 位小數 | |
| "NT$ {0:N2}" | NT$ 1,234.56 | 自訂貨幣符號(繁體中文環境建議) | |
| 科學記號 | {0:E2} | 1.23E+003 | 指數部分 2 位數 |
| 百分比 | {0:P2} | 12.35% | 值乘 100 加 %,2 位小數 |
| 日期時間 | {0:d} | 2024/01/15 | 短日期格式(文化特性相關) |
| {0:D} | 2024年1月15日 | 長日期格式 | |
| {0:t} | 下午 3:30 | 短時間格式 | |
| {0:T} | 下午 3:30:45 | 長時間格式(含秒) | |
| {0:f} | 2024年1月15日 下午 3:30 | 完整日期時間(短時間) | |
| {0:F} | 2024年1月15日 下午 3:30:45 | 完整日期時間(長時間) | |
| {0:yyyy/MM/dd} | 2024/01/15 | 自訂格式:年/月/日 | |
| {0:yyyy-MM-dd HH:mm:ss} | 2024-01-15 15:30:45 | 自訂格式:ISO 8601 風格 | |
| {0:MM/dd/yyyy hh:mm tt} | 01/15/2024 03:30 PM | 美式 12 小時制 |
<asp:GridView ID="gvProducts" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField DataField="UnitPrice" HeaderText="單價"
DataFormatString="{0:C2}" HtmlEncode="false" />
<asp:BoundField DataField="UnitsInStock" HeaderText="庫存"
DataFormatString="{0:N0}" HtmlEncode="false" />
<asp:BoundField DataField="DiscontinuedDate" HeaderText="停產日期"
DataFormatString="{0:yyyy/MM/dd}" HtmlEncode="false"
NullDisplayText="--" />
</Columns>
</asp:GridView>
<asp:TemplateField HeaderText="總額">
<ItemTemplate>
<%# Eval("UnitPrice", "{0:C2}") * Eval("Quantity", "{0:N0}") %>
</ItemTemplate>
</asp:TemplateField>
protected void gvProducts_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
// 找到特定欄位儲存格套用格式
e.Row.Cells[2].Text = Convert.ToDecimal(e.Row.Cells[2].Text).ToString("C2");
}
}
| 屬性 | 必要性 | 說明 |
|---|---|---|
| DataFormatString | 必要 | 格式字串,需包含 {0 佔位符 |
| HtmlEncode | 必要 | 設為 false 才會套用格式;預設 true 會 HTML 編碼導致格式失效 |
| NullDisplayText | 選用 | 資料為 NULL 時顯示文字(如 --、N/A) |
| ApplyFormatInEditMode | 選用 | true 時編輯模式也套用格式(預設 false) |
格式輸出受 Thread.CurrentThread.CurrentCulture 影響。繁體中文環境(zh-TW)預設:
可在 Web.config 統一設定:
<system.web>
<globalization culture="zh-TW" uiCulture="zh-TW" />
</system.web>
HtmlEncode="false"、資料型別正確(數值型別而非字串)。"NT$ {0:N2}"。DateTime.MinValue 或 NULL,使用 NullDisplayText 或 Convert.ToDateTime 判斷。熟練掌握 DataFormatString 格式字串,能讓資料呈現更專業、符合業務習慣。建議建立專案共用的格式常數類別(如 DisplayFormats.Currency),統一維護、減少魔術字串。