2013-02-10 10 views
6

Ich habe folgenden Ausdruck für die Währungsformatierung in einem ASP.Net Gridview. Das Dollar-Format wird nicht angezeigt, obwohl kein Fehler vorliegt. Was ist der fehlende Punkt hier?String Formatierung funktioniert nicht mit 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> 

Code hinter

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; } 
} 

Antwort

16

Warum entweder einfach nicht tun ...

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

oder

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

mir Sieht aus wie Sie zweimal Betrag in eine Zeichenfolge zu konvertieren, versuchen, und Sie können eine Zeichenfolge als Währung nicht formatiert werden.

+1

Bearbeitet. Sie haben vergessen, auf eine Ganzzahl zu setzen. – Matt

+0

Wie funktioniert es ohne "Casting" im ersten Ausdruck? – Lijo

+1

Ich nehme an, dass Int32 (int) IFormattable implementiert und eine ToString (string format) -Methode bereitstellt, die String.Format abhängig von der angegebenen Formatvorlage aufruft. – Matt

1

try this:

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

@Lijo Ich glaube, ich die .DataItem vergessen. Bitte versuchen Sie es jetzt (Ive bearbeitet) –

+0

@Lijo versuchen Sie jetzt ... –

4

versuchen Sie das, funktioniert für mich. (.NET 4.5 C#, in einem gridview)

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

Eval akzeptiert ein String-Format, und es besteht keine Notwendigkeit für diese Hacks.

So einfach wie: <%# Eval("Amount", "{0:C}") %>

+1

funktioniert es mit einem asp: Repeater-Steuerelement – Adrian