2013-02-10 78 views
6

我有一個ASP.Net Gridview中的貨幣格式的下列表達式。它沒有顯示美元格式,雖然沒有錯誤。這裏缺少什麼?字符串格式不適用於Eval

<%# String.Format("{0:C}", Convert.ToString(Eval("Amount"))) %> 

MARKUP

<asp:GridView ID="grdFinancialAmount" runat="server" AutoGenerateColumns="false"> 
     <Columns> 
      <asp:TemplateField HeaderText="Emp ID"> 
       <ItemTemplate> 
        <%# Eval("EmpID")%> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField HeaderText="Amount"> 
       <ItemTemplate> 
        <%# String.Format("{0:C}", Convert.ToString(Eval("Amount"))) %> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

後面的代碼

protected void Page_Load(object sender, EventArgs e) 
{ 
    Financial fin1 = new Financial { EmpID = 1, Amount = 5678 }; 
    Financial fin2 = new Financial { EmpID = 2, Amount = -111111 }; 

    List<Financial> accounts = new List<Financial>(); 
    accounts.Add(fin1); 
    accounts.Add(fin2); 

    grdFinancialAmount.DataSource = accounts; 
    grdFinancialAmount.DataBind(); 


} 


public class Financial 
{ 
    public int EmpID { get; set; } 
    public int Amount { get; set; } 
} 

回答

16

爲什麼不只是做要麼...

<%# String.Format("{0:C}", Eval("Amount")) %> 

<%# ((int)Eval("Amount")).ToString("C") %> 

在我看來就像你正試圖金額轉換爲字符串兩次,你無法格式化字符串作爲貨幣。

+1

已編輯。忘了將其轉換爲整數。 – Matt 2013-02-10 16:58:55

+0

如何在沒有在第一個表達式中投射的工作? – Lijo 2013-02-10 17:00:25

+1

我認爲這是因爲Int32(int)實現了IFormattable並提供了String.Format將根據給定的格式模板調用的ToString(string format)方法。 – Matt 2013-02-10 17:06:09

1

試試這個:

<%# String.Format("{0:C}", int.Parse(DataBinder.Eval(Container.DataItem, "Amount").ToString())) %> 
+0

@Lijo我想我忘了.DataItem。請立即嘗試(Ive編輯) – 2013-02-10 16:45:14

+0

@Lijo現在嘗試... – 2013-02-10 16:52:14

4

試試這個,適合我。 (.NET 4.5 C#,在一個gridview)

<%#Eval("Amout", "{0:C}").ToString()%> 
5

Eval接受字符串格式,並且也沒有必要對這些黑客。

只要:<%# Eval("Amount", "{0:C}") %>

+1

它使用asp:Repeater控件工作 – Adrian 2017-04-05 16:01:15

相關問題