トップ回答者
DataGridViewCellStyle.Formatのカスタム書式について

質問
-
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
回答
-
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
すべての返信
-
返信ありがとうございます。
追記の補足としては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
-
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
-
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