トップ回答者
DataGridViewので文字列(日付)の書式変換

質問
回答
-
string型の場合はフォーマットできませんので、CellFormattingイベントハンドラで加工してみて下さい。
(参考)
Creating a custom format string in a dataGridView
http://stackoverflow.com/questions/2715710/creating-a-custom-format-string-in-a-datagridview★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク sumi_sumi 2012年2月13日 1:11
すべての返信
-
string型の場合はフォーマットできませんので、CellFormattingイベントハンドラで加工してみて下さい。
(参考)
Creating a custom format string in a dataGridView
http://stackoverflow.com/questions/2715710/creating-a-custom-format-string-in-a-datagridview★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
- 回答としてマーク sumi_sumi 2012年2月13日 1:11
-
trapemiyaさま
有難う御座います。
参考にして以下のようにしてみましたが特に変化がありませんでした。
イベント自体は走っておりました。
他にも何か必要でしょうか?
private void dgv明細_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
foreach (DataGridViewColumn c in this.dgv明細.Columns)
{
if (c.Name.Contains(this.col日付.Name))
{
c.DefaultCellStyle.Format = "yyyy年MM月dd日";
}
}
} -
trapemiyaさんの提示されたリンクやCellFormattingイベントの説明を読み、何を記述すべきか判断できなかったのでしょうか?
-
参考にして以下のようにしてみましたが特に変化がありませんでした。
繰り返しになりますが、string型はフォーマットすることができません。フォーマットするためには、フォーマットをする前の元の値が明確になっていなければなりませんが、文字列はC#にとって単なる文字が連続したものという解釈でしかないため、フォーマットすることができません。例えば"20120210"は2012年2月10日とも解釈できますし、"2012年2月10時"とも解釈できるわけです。この例は常識的には極端な例ですが、"2010"と単に示された場合、2010年なのか、20時10分なのか判断のしようがないという例だと、もう少し理解しやすいと思います。
よって、c.DefaultCellStyle.Format = "yyyy年MM月dd日"; は、セルの値が文字列であるため、フォーマットが適用されず、スルーされています。
ですから、解決策としてはmars12さんが書かれたようにされても良いですが、ここでは単に文字列を加工するだけで十分でしょう。例えば以下のようにします。
var v= e.Value;
e.Value = v.Substring(0, 4) + "年" + v.Substring(4, 2) + "月" + v.Substring(6, 2) + "日";
ただし、いずれにしても元の文字列を加工して表示しているため、もしその値をユーザーが編集するのであればややこしくなりますし、注意が必要でしょう。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/