2013-02-10 14 views
6

Mam następujące wyrażenie formatowania waluty wewnątrz widoku siatki ASP.Net. Nie pokazuje formatu dolara, chociaż nie ma błędu. Jaki jest brakujący punkt?Formatowanie ciągów Nie działa z Eval

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

znaczników

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

kod związany

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

Odpowiedz

16

Dlaczego nie zrobić albo ...

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

lub

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

Wygląda mi na to, że starają się przekształcić Kwota do łańcucha dwa razy, i nie można formatować ciąg jako waluty.

+1

Edytowane. Zapomniałem rzutować na liczbę całkowitą. – Matt

+0

Jak to działa bez "rzucania" w pierwszym wyrażeniu? – Lijo

+1

Zakładam, że dzieje się tak dlatego, że Int32 (int) implementuje IFormattable i zapewnia metodę ToString (format łańcucha), którą String.Format wywoła w zależności od podanego szablonu formatu. – Matt

1

spróbuj tego:

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

@Lijo Chyba zapomniał .DataItem. spróbuj teraz (edytowałem) –

+0

@Lijo wypróbuj teraz ... –

4

wypróbuj to, działa dla mnie. (.NET 4.5 C#, w gridview)

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

Eval akceptuje format string, i nie ma potrzeby tych hacków.

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

+1

działa przy użyciu kontrolera asp: Repeater – Adrian

Powiązane problemy