2008-10-30 29 views
1

我有一個非常簡單的ASP.Net頁面,充當存儲過程的前端。它只是運行該過程並使用gridview控件顯示輸出:少於40行的總代碼,包括aspx標記。存儲過程本身非常...易變。它用於很多目的,並且輸出格式會定期更改。基於數據類型的ASP.Net GridView的格式列

整件事很好,因爲gridview控件並不需要關心存儲過程返回的列:它只是在頁面上顯示它們,這正是我想要的。

但是,運行的數據庫在時間部分並不真正重要的地方有許多日期時間列 - 它總是被清零。我希望能夠做到的是控制gridview中日期時間列的格式,而不必準確知道那些列將會是哪些列。任何時候,結果中的列都有日期時間類型,只需應用一個給定的格式字符串即可修剪時間組件。

我知道我可以轉換爲數據庫中的varchar,但我真的不希望讓開發人員在查詢中格式化,而且這屬於演示級別。任何其他想法?

Protected Sub OnRowDatabound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) 
    If e.Row.RowType = DataControlRowType.DataRow Then 
     Dim d As DateTime 
     For Each cell As TableCell In e.Row.Cells 
      If Date.TryParse(cell.Text, d) AndAlso d.TimeOfDay.Ticks = 0 Then 
       cell.Text = d.ToShortDateString() 
      End If 
     Next cell 
    End If 
End Sub 

回答

2

如果你是自動生成,它聽起來就像你列。使用網格格式的過程很糟糕。

您需要遍歷網格的所有列,可能是在數據綁定事件中,並將格式化表達式應用於任何您找到的列是日期列。

如果您不是自動生成的,並且您正在編碼網格中的列,那麼您還將知道哪些列是日期列,並且可以將相同的格式表達式應用於該列。這就像{0:ddMMyyyy},但你必須查看它,因爲這可能不太正確。

所以總結鉤入數據綁定事件。循環訪問列集合並確定列是否爲日期列。我不知道你可能會這樣做:)。如果您決定列是日期列,請設置其格式表達式。

----------------------編輯

確定如何對你寫你的方法是從PROC返回數據返回一個數據表。格式化數據表中的數據後,可以將數據表綁定到網格。 datatable.Columns集合是DataColumns的集合,它們具有DataType屬性。您可能正在尋找System.DateTime或DateTime,它可能是DataType屬性本身的一個屬性:)。我知道這很麻煩,但你要問的是最初的做法會很麻煩。一旦你確定了日期列,你可以用它做些事情。

如果不是,我會開始查看數據讀取器,看看有什麼可以在那裏做的或者有數據適配器。我希望我能給你一個正確的答案,但是我認爲不管你做到了,它不會很漂亮。對不起

+0

這看起來八九不離十:我在投票或接受之前,我會再等一會兒,這樣問題就會停留在未答覆的選項卡上,但我會盡快回復您。 – 2008-10-30 18:33:32

2

如果使用顯式綁定列是一個選項,一個DataFormatString添加到您的BoundField

<asp:BoundField DataField="Whatever" ... DataFormatString="{0:dd/MM/yyyy}" HtmlEncode="False"/ > 

否則,你可以看看做格式化GridView.OnRowDataBound事件

相關問題