買太郎'sキャッシュメモリFab

キャッシュ生産中。。。

目次

ニュース

ledys bikoujun

日記カテゴリ

書庫

ギャラリ

Blog 利用状況

2006年9月1日 #

DataGridViewのセルを編集時に別フォーマットにする

<概要>
DataGridViewのあるカラムに、カンマ付き数値を表示。
編集のタイミングでカンマを取って編集したい。

<例>
private void dgvList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.ColumnIndex == 8)
    {
      //編集中じゃなきゃ、カンマ付きにフォーマット
      if (dgvList[e.ColumnIndex, e.RowIndex].IsInEditMode == false)
      {
        //e.Valueのチェックとかいるかもね
        e.Value = e.Value.ToString("###,##0");
        }
      else
      {
        //処理無し
      }
    }
}

private void dgvList_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
if (e.ColumnIndex == 8)
{
//フォーマットの仕方は、ご自由に
dgvList[e.ColumnIndex, e.RowIndex].Value = dgvList[e.ColumnIndex, e.RowIndex].Value.ToString().Replace(",", string.Empty);
}
}


<例 補足>
e.ColumnIndex == 8の列には、数値系型のデータがバインドされてる。
実装時には、DataGridViewTextBoxColumn等のカラムオブジェクト.Indexがスマートかな?


<ポイント>
・CellFormattingイベント内で、IsInEditModeによって、編集中かどうかを判断。(カンマをつける)
・CellBeginEditで、イベント内で編集用フォーマットに切り替える。(カンマを取る)
・CellBeginEditでカンマ取っても、Valueにセットする行為で、CellFormattingイベントが発生するのでIsInEditModeでの判断を入れないと無駄(取った瞬間、カンマ付きになるので永遠にカンマ付き)

<まとめ>
表示フォーマットと編集フォーマットが違う場合には、上記でいけそうだ。
注意するのは、「単純に表示時にカンマつけてよ!」って仕様書に書いてる時は、CellFormattingでしちゃだめです。
理由は、重いから。昨日のエントリ見て下さい。
http://blogs.wankuma.com/koutarou/archive/2006/08/31/37323.aspx#37324


<今日の感想>
DataGridViewは、イベント多すぎで手ごわいな。。。
ヘルプとかだけじゃ掴みきれないし、Google様もあまり教えてくれない。

posted @ 16:36 | Feedback (371)