none
DataGridViewの書式指定について RRS feed

  • 質問

  • こんにちは

    VS2008+C#環境です。

    DataGridViewの書式指定について教えてください。

    フォームにDataGridViewを配置し、列を3列追加し、1列目のDefaultCellStyleのFormatプロパティをN2(カンマ付き数値の小数部2桁表示)と設定しました。

    フォーム実行時にLoadイベントで空の行を5行追加しました。

    (↑列数と行数には特に意味はありません)

    1行目の1列目にキーボードから「1234」と入力したところ、入力通りに「1234」と表示されます。

    結果としては「1,234.00」と表示されることを期待していたのですが...

    ヘルプを読むと、EditedFormattedValue プロパティ を取得すると、CellFormattingイベントが発生するので、このイベントを処理しなさいと書かれているのですが、どのような処理を行えばよいのでしょうか。

    よろしくお願いします。

    2011年9月30日 7:09

回答

  • Format は、その DataGridColumn の ValueType が String になっている場合は有効に動きません(Debug.Print("{0:N2}", "1234") とやっても書式化されないと言う状況と全く同じです。数字文字列と数値は全く別物ですので)。

    ValueType プロパティを適切な数値型に変更してやる必要があります。

    // VS2010 だとデザイナからは設定できないっぽい……。その場合は Form1() コンストラクタの、InitializeComponent() の呼び出しの後ろあたりにでも手動でコードを挿入してください。

    なお、DataGridView は基本的に DataSource(特に DataTable)を使った運用をメインに想定している節があります。それらを使う場合、データソースが報告する列の型が自動的に ValueType に設定されます。

    • 回答としてマーク mokosan 2011年9月30日 7:49
    2011年9月30日 7:38

すべての返信

  • Format は、その DataGridColumn の ValueType が String になっている場合は有効に動きません(Debug.Print("{0:N2}", "1234") とやっても書式化されないと言う状況と全く同じです。数字文字列と数値は全く別物ですので)。

    ValueType プロパティを適切な数値型に変更してやる必要があります。

    // VS2010 だとデザイナからは設定できないっぽい……。その場合は Form1() コンストラクタの、InitializeComponent() の呼び出しの後ろあたりにでも手動でコードを挿入してください。

    なお、DataGridView は基本的に DataSource(特に DataTable)を使った運用をメインに想定している節があります。それらを使う場合、データソースが報告する列の型が自動的に ValueType に設定されます。

    • 回答としてマーク mokosan 2011年9月30日 7:49
    2011年9月30日 7:38
  • Hongliang様

    返信ありがとうございます。

    教えていただいた通りに行ったところ、期待通りの結果が得られました。

    わかってしまえば簡単なことなのですね。

    しっかり勉強していきます。

    ありがとうございました。

    2011年9月30日 7:49