2012-03-29 34 views
1

需要GridView中的DataFormatString幫助。我有一個Double值,需要顯示爲TimeSpan。我試過DataFormatString =「{0:HH:mm:ss}」。這沒有奏效。GridView的DataFormatString問題。將Doudle轉換爲TimeStamp

測試了它在C#一點,在那裏我會做:

TimeSpan.FromHours(16.7358217592592).ToString() 

這給了我。

"16:44:08.9580000" 

這就是我所追求的。但如何在ASP.Net中獲得它是一個大問題。 有何建議?

我有一個簡單的GridView,看起來像這樣。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"> 
<Columns> 
    <asp:BoundField DataField="sOprTime" HeaderText="Sum OprTime" ReadOnly="True" SortExpression="sOprTime" /> 
    <asp:BoundField DataField="sWorkTime" HeaderText="Sum WorkTime" ReadOnly="True" SortExpression="sWorkTime" /> 
    <asp:BoundField DataField="sFaultTime" HeaderText="Sum FaultTime" ReadOnly="True" SortExpression="sFaultTime" /> 
</Columns> 
<EmptyDataTemplate> 
    No data is present. 
</EmptyDataTemplate> 

SQL查詢看起來是這樣的:

sqlString1 = string.Format(@"SELECT SUM(CONVERT (Float, OprTime)) AS sOprTime, SUM(CONVERT (Float, WorkTime)) AS sWorkTime, SUM(CONVERT (Float, OprTime)) - SUM(CONVERT (Float, WorkTime)) AS sFaultTime FROM tblNovikLogg WHERE (Date_Time > '{0:yyyy/MM/dd H:mm:ss}' And Date_Time < '{1:yyyy/MM/dd H:mm:ss}')", selectedDate, selectedDate.AddDays(1)); 

回答

1

你可以做,在RowDataBound

protected void Grid_RowDataBound(Object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var row = ((DataRowView)e.Row.DataItem).Row; 
     Double sWorkTime = row.Field<Double>("sWorkTime"); 
     TimeSpan ts = TimeSpan.FromHours(sWorkTime); 
     String formattedTimespan = String.Format(@"{0:hh\:mm\:ss}", ts); 
     e.Row.Cells[1].Text = formattedTimespan; 
    } 
} 
+0

謝謝!這工作篦。 – TAT 2012-03-30 06:37:41

0

你不能用一個DataFormatString解決這個問題。 我會etiher:

  1. 採取的對象,你送入GridView中收集並進行投影(例如,使用LINQ),將作爲包含值的時間跨度對象和飼料是投影到gridview的(容易)

  1. 寫在你的代碼隱藏的方法處理該事件的GridView RowCreated適用自定義格式想要的細胞(硬)