3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)DataGridViewからCSVエクスポート時に書式変更

DataGridViewで商品の売上情報を表示し、ボタン押下すると DataGridView.GetClipboardContent() を使ってCSVにエクスポートする仕組みを作っています。

DataGridViewの価格情報に関する列は DefaultCellStyle.Format = "c" と定義し、書式化された値で表示してます。

この状態で、DataGridView.GetClipboardContent() を使うと、書式化された値(例:¥1,000)が取得されてしまいます。

ですが、納品先からCSVエクスポート時は書式化されない方がいいという要望がありました。

クラスライブラリに便利なメソッドあるかと思って調べましたが、無いようです。

ということで下記の対処にしました。

//dgvは DataGridView を表す

 

//書式化を解除

dgv.Columns["Price"].DefaultCellStyle.Format = "g";

dgv.Columns["UnitPrice"].DefaultCellStyle.Format = "g";

 

//CSVデータを作成

dgv.SelectAll();

DataObject returnValue = dgv.GetClipboardContent();

 

//書式化を再指定

dgv.Columns["Price"].DefaultCellStyle.Format = "c";

dgv.Columns["UnitPrice"].DefaultCellStyle.Format = "c";

 

//CSV文字列取得

string strCsv = returnValue.GetText(TextDataFormat.CommaSeparatedValue);

一旦書式化を解除して、GetClipboardContent() 後に書式化を再指定する方法です。

無理やりてき感じがしますが、まぁとりあえずこれでしのぐことに。。

フォーマットの書式指定は下記を参照。

http://msdn.microsoft.com/ja-jp/library/dwhawy9k%28VS.80%29.aspx