2016-07-29 103 views
0

我有一個存儲過程在我的Gridview中用作數據源。有些列是數字,我希望它們用帶有十進制和逗號的Money格式進行格式化。在GridView中格式化一個數值沒有Boundfield

我能夠通過使用綁定列一個dataformatstring屬性類似這樣的例子

<asp:BoundField HeaderText="Non VAT" DataField="nonvat" DataFormatString="{0:#,##0.00;(#,##0.00);0}" /> 

然而,在我的情況之前實現,沒有綁定列可用的,因爲我已經作出的BoundField一個邏輯不需要。

除了在SQL中馬上格式化之外,還有其他的方式可以做到嗎?

+1

你現在正在使用的,而不是綁定列,以顯示你的數據?模板列?還有別的嗎?無論如何,現在使用它的方式 – Andrei

+0

autogeneratecolumn設置爲true。因此,作爲數據源的存儲過程實際上是在Gridview中將數據顯示在ASP.net中進行硬編碼。 – rickyProgrammer

+0

使用boundfield時,autogeneratecolumns設置爲false。 – rickyProgrammer

回答

0

您可以隨時使用RowDataBound,假設nonvat是一個小數,它的第一列:

protected void grid_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     DataRowView row = (DataRowView)e.Row.DataItem; 
     decimal nonvat = (decimal)row["nonvat"]; 
     e.Row.Cells[0].Text = nonvat.ToString("#,##0.00;(#,##0.00);0}"); 
    } 
} 
+0

儘管這可能有效,但OP有意使用自動生成列的事實表明列的數量是動態的。然後,OP可能無法知道哪個列索引轉到哪個列。 – Andrei

+0

如果列名不是靜態的,該怎麼辦?我可以在「nonvat」部分放什麼? – rickyProgrammer

+0

@rickyProgrammer:你總是可以使用'int'-indexer:'decimal nonvat =(decimal)row [0];' –