<概要>
DataGridViewへDataTableをBindさせ数値型データ(8桁)をスラッシュ付き(yyyy/MM/dd)形式で表示
<経緯>
今回の案件の全部日付カラムは、整数8桁だ。(年月6桁)
(その設計は、DB設計担当者に聞いてくれ。オラしらね)
んでもって、それをDataGridViewに表示時にスラッシュ付きフォーマットに変換して表示してみた。
(プロパティデザイナで設定するDefaultCellStyleのFormatをDに設定しても、数値型だと変換出来ないので)
<例>
/// グリッドセル フォーマット設定
private void dgvList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
//データソース 8桁の整数値の日付の表示をスラッシュ付きに変換
//細かい判定や例外処理は、各自でよろしく
if (e.ColumnIndex == YMD.Index)
{
//適当に変換方法変えてね
e.Value = (e.Value).ToString().Insert(4,"/").Insert(7,"/");
}
}
SQLで形式って手もあるけど、当然そうなるとそのDataGridView専属のSQLになるので、これでやってみた。
<難点>
ただ、CellFormattingイベント
**MSDN抜粋**
CellFormatting イベントはセルが塗りつぶされるたびに発生するため、
このイベントを処理するときは時間のかかる処理を回避する必要があります。
このイベントは、セルの FormattedValue が取得された場合や、
GetFormattedValue メソッドが呼び出された場合にも発生します。
との事なんで、しょっちゅう発生します。
非表示から、表示に切り替えたりしただけで動いてました。
それゆえ、当然、表示データ量が多かったり、フォーマットする列が多かったり、
フォーマット処理自体が重いと見苦しくなる可能性あります。
なんか、別に良い方法があったら教えて下さい。
(とりあえず、いまさら日付型に変更なんて出来ないから今回はこれで!妥協orz)