none
DataGridViewので文字列(日付)の書式変換 RRS feed

  • 質問

  • お世話になります。

    DataGridViewのセルの書式についてです。

    文字列の"20120210"を
    "2010年02月10日"や"2010/02/10"などと変換して表示したいのです。

    セルの値がDate型ならばDefaultCellStyle.Format = "yyyy/MM/dd"でいけると思うのですが、
    文字列型の場合にはどのようにしたら良いでしょうか?
    2012年2月10日 7:26

回答

すべての返信

  • 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
    2012年2月10日 8:00
    モデレータ
  • 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日";

                        }
                        

                    }
                }

    2012年2月10日 9:31
  • > 文字列の"20120210"を

    直接"2010年02月10日"とかに変えれないと思うので
    1. 値 "20120210"をDateTime型にする
    2. DateTime型を文字列に書式付で変換する
    というのをCellFormattingの中で自前でやらないといけないと思います。

    2012年2月12日 23:58
  • trapemiyaさんの提示されたリンクやCellFormattingイベントの説明を読み、何を記述すべきか判断できなかったのでしょうか?
    2012年2月13日 0:57
  • mars12さま

    有難う御座います。

    理解出来ました。

    2012年2月13日 1:13
  • 参考にして以下のようにしてみましたが特に変化がありませんでした。

    繰り返しになりますが、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/

    2012年2月13日 1:14
    モデレータ
  • 佐祐理 さま

    すいません。

    リンク先のアンサーを見落としていました。

    やっと理解出来ました。

    2012年2月13日 1:14