none
DataGridViewCellStyle.Formatのカスタム書式について RRS feed

  • 質問


  • System.Windows.Forms.DataGridViewCellStyle.Formatのカスタム書式について.NET Framework 3.5での動作について教えて下さい。

    日付のカスタム書式として MM/dd HH:mmといったスタイルを設定したいのですが、

    デザイナーからFormatに値を設定しても、yyyy/MM/dd H:mmのスタイルをずっと維持されるのですがこれは仕様なのでしょうか?

    DataGridViewのDataSourceにはデザイナーから作成した型付きDataSetを利用しています。

    Visual Studio 2010 Premium SP1ではFormatに記載した値は反映されませんでした。

    Visual Studio 2013 Community Update4では Formatに記載した値は反映されました。

    MSDNのページには細かい動作について記載されていませんでした。

    よろしくお願いします。




    • 編集済み qpopper02 2015年6月1日 13:41
    2015年6月1日 12:06

回答

  • Tak1wa さんも質問されてますが、そもそもどのように元になる Windows Forms アプリを作って、それにどのように DataGridViewCellStyle を追加しているのでしょうか?

    > DataGridViewのDataSourceにはデザイナーから作成した型付きDataSetを利用しています。

    と書かれていますが、それだけでは情報として不十分です。

    以下のチュートリアルの図 15 のように、Visual Studio のウィザードを使って、[データ ソース] ウィンドウから当該データソースをフォーム上にドラッグ & ドロップして DataGridView のコードを、その中の列の設定を含めて、自動生成したのですか?

    10 行でズバリ !! 非接続型のデータ アクセス (ADO.NET) (C#)
    https://code.msdn.microsoft.com/windowsdesktop/10-ADONET-C-cbfe7688

    そうであれば、Tak1wa さんがアップされた画像のように設定すれば、Form1.Designer.cs のコードが自動的に変更されます。

    例えば、上に紹介したチュートリアルで、DataGridView の OrderDate に CellStyle ビルダーを使って Format を設定すれば、Form1.Designer.cs の当該列のコードは自動的に以下のように変更されます。誰がやっても間違いようがないですよね。

    オリジナル

    this.dataGridViewTextBoxColumn4.DataPropertyName = "OrderDate";
    this.dataGridViewTextBoxColumn4.HeaderText = "OrderDate";
    this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4";

    CellStyle ビルダーで設定後

    System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = 
        new System.Windows.Forms.DataGridViewCellStyle();
    
    this.dataGridViewTextBoxColumn4.DataPropertyName = "OrderDate";
    dataGridViewCellStyle1.Format = "MM/dd HH:mm";
    this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle1;
    this.dataGridViewTextBoxColumn4.HeaderText = "OrderDate";
    this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4";

    上に紹介したチュートリアルのような作り方ではなくて、型付 DataSet + TableAdapter を作るところまでは Visual Studio のウィザードを使ったが、その後は自力でコードを書いたということですか?

    そうだとすると、自力で書いた部分とそれにどのように DataGridViewCellStyle を追加したかが不明確なままでは話が進められません。そのあたりの詳細を書いてください。

    想像で回答して、想像が実際と違っていると、回答が的外れになって混乱を招くばかりですので。

    【追伸】

    書き忘れましたが、上記のコードは Visual Studio 2010 SP1 Professional, .NET 4 で、紹介したチュートリアルの通りに作って、デザイナ画面で CellStyle ビルダーを利用してDataGridViewCellStyle を追加設定したとき自動的に生成されたものです。

    なので、Visaul Studio のバージョンは関係なくて、質問者さんのやり方の問題(はっきり言うとどこかに設定のミスがある)ではないでしょうか?


    • 編集済み SurferOnWww 2015年6月2日 4:18 追伸追加
    • 回答としてマーク qpopper02 2015年6月2日 9:12
    2015年6月2日 3:36

すべての返信

  • こんにちは。
    確認方法は以下で良いですか?

    .NET4.0、.NET3.5でも問題は発生しませんでした。(デザイナで指定したフォーマットで動作する)
    VisualStudio2013 Community Update 4です。

    もしかすると特定バージョンのVisual Studioに依存した問題かもしれません。
    問題が起きる時と起きない時のVisual Studioのバージョンは同一ですか?

    2015年6月1日 12:49
    モデレータ
  • 返信ありがとうございます。

    追記の補足としてはDataGridViewのDataSourceとして型付きDataSetを使用しています。

    そして、記載内容に間違えがありました。

    Visual Studio 2010 Premium SP1だと.NET Framework 3.5 4.0両方でも型付きDataSetを利用した場合

    Formatが正しく動作しません。

    Visual Studio 2013 Community Update 4を利用した場合 3.5 4.0両方でも型付きDataSetで利用した場合

    Formatが正しく動作しました。



    • 編集済み qpopper02 2015年6月1日 13:35
    2015年6月1日 13:26
  • 確認ですが、Visual Studio 2010 Premium SP1とVisual Studio 2013 Community Update4は同じプロジェクトでしょうか? 気にしているのは、Visual Studio 2010 Premium SP1の方は、文字型のデータに対してフォーマットを適用しようとしていないかということです。

    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    2015年6月1日 23:58
    モデレータ
  • Tak1wa さんも質問されてますが、そもそもどのように元になる Windows Forms アプリを作って、それにどのように DataGridViewCellStyle を追加しているのでしょうか?

    > DataGridViewのDataSourceにはデザイナーから作成した型付きDataSetを利用しています。

    と書かれていますが、それだけでは情報として不十分です。

    以下のチュートリアルの図 15 のように、Visual Studio のウィザードを使って、[データ ソース] ウィンドウから当該データソースをフォーム上にドラッグ & ドロップして DataGridView のコードを、その中の列の設定を含めて、自動生成したのですか?

    10 行でズバリ !! 非接続型のデータ アクセス (ADO.NET) (C#)
    https://code.msdn.microsoft.com/windowsdesktop/10-ADONET-C-cbfe7688

    そうであれば、Tak1wa さんがアップされた画像のように設定すれば、Form1.Designer.cs のコードが自動的に変更されます。

    例えば、上に紹介したチュートリアルで、DataGridView の OrderDate に CellStyle ビルダーを使って Format を設定すれば、Form1.Designer.cs の当該列のコードは自動的に以下のように変更されます。誰がやっても間違いようがないですよね。

    オリジナル

    this.dataGridViewTextBoxColumn4.DataPropertyName = "OrderDate";
    this.dataGridViewTextBoxColumn4.HeaderText = "OrderDate";
    this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4";

    CellStyle ビルダーで設定後

    System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = 
        new System.Windows.Forms.DataGridViewCellStyle();
    
    this.dataGridViewTextBoxColumn4.DataPropertyName = "OrderDate";
    dataGridViewCellStyle1.Format = "MM/dd HH:mm";
    this.dataGridViewTextBoxColumn4.DefaultCellStyle = dataGridViewCellStyle1;
    this.dataGridViewTextBoxColumn4.HeaderText = "OrderDate";
    this.dataGridViewTextBoxColumn4.Name = "dataGridViewTextBoxColumn4";

    上に紹介したチュートリアルのような作り方ではなくて、型付 DataSet + TableAdapter を作るところまでは Visual Studio のウィザードを使ったが、その後は自力でコードを書いたということですか?

    そうだとすると、自力で書いた部分とそれにどのように DataGridViewCellStyle を追加したかが不明確なままでは話が進められません。そのあたりの詳細を書いてください。

    想像で回答して、想像が実際と違っていると、回答が的外れになって混乱を招くばかりですので。

    【追伸】

    書き忘れましたが、上記のコードは Visual Studio 2010 SP1 Professional, .NET 4 で、紹介したチュートリアルの通りに作って、デザイナ画面で CellStyle ビルダーを利用してDataGridViewCellStyle を追加設定したとき自動的に生成されたものです。

    なので、Visaul Studio のバージョンは関係なくて、質問者さんのやり方の問題(はっきり言うとどこかに設定のミスがある)ではないでしょうか?


    • 編集済み SurferOnWww 2015年6月2日 4:18 追伸追加
    • 回答としてマーク qpopper02 2015年6月2日 9:12
    2015年6月2日 3:36
  • VS2010 premiumを入れてみて試しましたが同様の現象は発生しませんでした。

    • DataGridView.DefaultCellStyle
    • DataGridViewColumn.DefaultCellStyle
    • DataGridViewRow.DefaultCellStyle
    • DataGridViewCell.Style

    のどれに設定しましたか?
    #デザイナからならDataGridViewかColumnのどちらかのはず

    下の方が優先されるので、DataGridViewでFormatを設定してもColumnやCellのStyleの方が優先されます。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 編集済み gekkaMVP 2015年6月2日 4:07
    2015年6月2日 3:59
  • 返信ありがとうございます。

    解決しました。自分のプログラム自体の設定ミスでした。

    皆様には色々とお手数おかけしました。ありがとうございましたm(__)m

    2015年6月2日 9:12