<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>DataGridView</title><link>http://blogs.wankuma.com/koutarou/category/575.aspx</link><description>DataGridView</description><managingEditor>koutarou</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>koutarou</dc:creator><title>DataGridViewのセルを編集時に別フォーマットにする</title><link>http://blogs.wankuma.com/koutarou/archive/2006/09/01/37481.aspx</link><pubDate>Fri, 01 Sep 2006 16:36:00 GMT</pubDate><guid>http://blogs.wankuma.com/koutarou/archive/2006/09/01/37481.aspx</guid><wfw:comment>http://blogs.wankuma.com/koutarou/comments/37481.aspx</wfw:comment><comments>http://blogs.wankuma.com/koutarou/archive/2006/09/01/37481.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/koutarou/comments/commentRss/37481.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/koutarou/services/trackbacks/37481.aspx</trackback:ping><description>＜概要＞&lt;br&gt;
DataGridViewのあるカラムに、カンマ付き数値を表示。&lt;br&gt;
編集のタイミングでカンマを取って編集したい。&lt;br&gt;
&lt;br&gt;
＜例＞&lt;br&gt;
private void dgvList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)&lt;br&gt;
{&lt;br&gt;&lt;ul&gt;
if (e.ColumnIndex == 8)&lt;br&gt;
{&lt;br&gt;&lt;ul&gt;
//編集中じゃなきゃ、カンマ付きにフォーマット&lt;br&gt;
if (dgvList[e.ColumnIndex, e.RowIndex].IsInEditMode == false)&lt;br&gt;
{&lt;br&gt;&lt;ul&gt;
//e.Valueのチェックとかいるかもね&lt;br&gt;
e.Value = e.Value.ToString("###,##0");&lt;br&gt;
}&lt;/ul&gt;
else&lt;br&gt;
{&lt;br&gt;&lt;ul&gt;
//処理無し&lt;/ul&gt;
}&lt;/ul&gt;
}&lt;/ul&gt;
}
&lt;br&gt;
&lt;br&gt;
private void dgvList_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)&lt;br&gt;
{&lt;br&gt;
	if (e.ColumnIndex == 8)&lt;br&gt;
	{&lt;br&gt;
		//フォーマットの仕方は、ご自由に&lt;br&gt;
		dgvList[e.ColumnIndex, e.RowIndex].Value = dgvList[e.ColumnIndex, e.RowIndex].Value.ToString().Replace(",", string.Empty);&lt;br&gt;
	}&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
＜例　補足＞&lt;br&gt;
e.ColumnIndex == 8の列には、数値系型のデータがバインドされてる。&lt;br&gt;
実装時には、DataGridViewTextBoxColumn等のカラムオブジェクト.Indexがスマートかな？&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;ポイント&gt;&lt;br&gt;
・CellFormattingイベント内で、IsInEditModeによって、編集中かどうかを判断。（カンマをつける）&lt;br&gt;
・CellBeginEditで、イベント内で編集用フォーマットに切り替える。（カンマを取る）&lt;br&gt;
・CellBeginEditでカンマ取っても、Valueにセットする行為で、CellFormattingイベントが発生するのでIsInEditModeでの判断を入れないと無駄（取った瞬間、カンマ付きになるので永遠にカンマ付き）&lt;br&gt;
&lt;br&gt;
＜まとめ＞&lt;br&gt;
表示フォーマットと編集フォーマットが違う場合には、上記でいけそうだ。&lt;br&gt;
注意するのは、「単純に表示時にカンマつけてよ！」って仕様書に書いてる時は、CellFormattingでしちゃだめです。&lt;br&gt;
理由は、重いから。昨日のエントリ見て下さい。&lt;br&gt;
http://blogs.wankuma.com/koutarou/archive/2006/08/31/37323.aspx#37324&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
＜今日の感想＞&lt;br&gt;
DataGridViewは、イベント多すぎで手ごわいな。。。&lt;br&gt;
ヘルプとかだけじゃ掴みきれないし、Google様もあまり教えてくれない。&lt;br&gt;&lt;img src ="http://blogs.wankuma.com/koutarou/aggbug/37481.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>koutarou</dc:creator><title>DataGridViewに数値を日付形式フォーマットみたいな</title><link>http://blogs.wankuma.com/koutarou/archive/2006/08/31/37323.aspx</link><pubDate>Thu, 31 Aug 2006 14:38:00 GMT</pubDate><guid>http://blogs.wankuma.com/koutarou/archive/2006/08/31/37323.aspx</guid><wfw:comment>http://blogs.wankuma.com/koutarou/comments/37323.aspx</wfw:comment><comments>http://blogs.wankuma.com/koutarou/archive/2006/08/31/37323.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/koutarou/comments/commentRss/37323.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/koutarou/services/trackbacks/37323.aspx</trackback:ping><description>＜概要＞&lt;br&gt;
DataGridViewへDataTableをBindさせ数値型データ（８桁）をスラッシュ付き(yyyy/MM/dd)形式で表示&lt;br&gt;
&lt;br&gt;
＜経緯＞&lt;br&gt;
今回の案件の全部日付カラムは、整数８桁だ。（年月６桁）&lt;br&gt;
（その設計は、ＤＢ設計担当者に聞いてくれ。オラしらね）&lt;br&gt;
んでもって、それをDataGridViewに表示時にスラッシュ付きフォーマットに変換して表示してみた。&lt;br&gt;
（プロパティデザイナで設定するDefaultCellStyleのFormatをDに設定しても、数値型だと変換出来ないので）&lt;br&gt;
&lt;br&gt;
＜例＞&lt;br&gt;
/// グリッドセル　フォーマット設定&lt;br&gt;
private void dgvList_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)&lt;br&gt;
{&lt;br&gt;
&lt;ul&gt;
    //データソース　８桁の整数値の日付の表示をスラッシュ付きに変換&lt;br&gt;
    //細かい判定や例外処理は、各自でよろしく&lt;br&gt;
    if (e.ColumnIndex == YMD.Index)&lt;br&gt;
    {&lt;br&gt;
&lt;ul&gt;
        //適当に変換方法変えてね&lt;br&gt;
        e.Value = (e.Value).ToString().Insert(4,"/").Insert(7,"/");&lt;br&gt;
&lt;/ul&gt;
    }&lt;br&gt;
&lt;/ul&gt;
}&lt;br&gt;
&lt;br&gt;
SQLで形式って手もあるけど、当然そうなるとそのDataGridView専属のSQLになるので、これでやってみた。&lt;br&gt;
&lt;br&gt;
＜難点＞&lt;br&gt;
ただ、CellFormattingイベント&lt;br&gt;
&lt;ul&gt;&lt;i&gt;
	**MSDN抜粋**&lt;br&gt;
	CellFormatting イベントはセルが塗りつぶされるたびに発生するため、&lt;br&gt;
	このイベントを処理するときは時間のかかる処理を回避する必要があります。&lt;br&gt;
	このイベントは、セルの FormattedValue が取得された場合や、&lt;br&gt;
	GetFormattedValue メソッドが呼び出された場合にも発生します。&lt;br&gt;
&lt;/i&gt;&lt;/ul&gt;
との事なんで、しょっちゅう発生します。&lt;br&gt;
非表示から、表示に切り替えたりしただけで動いてました。&lt;br&gt;
それゆえ、当然、表示データ量が多かったり、フォーマットする列が多かったり、&lt;br&gt;
フォーマット処理自体が重いと見苦しくなる可能性あります。&lt;br&gt;
&lt;br&gt;
なんか、別に良い方法があったら教えて下さい。&lt;br&gt;
（とりあえず、いまさら日付型に変更なんて出来ないから今回はこれで！妥協orz）&lt;br&gt;


&lt;img src ="http://blogs.wankuma.com/koutarou/aggbug/37323.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>