ストアド プロシージャのフロント エンドとして機能する非常に単純な ASP.Net ページがあります。プロシージャを実行するだけで、gridview コントロールを使用して出力が表示されます。aspx マークアップを含め、合計コードは 40 行未満です。ストアド プロシージャ自体は非常に揮発性です。さまざまな目的で使用され、出力形式は定期的に変更されます。
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