■GridViewの「単価」列に「\」を表示する (GridView06StepUp1.aspx)
GridViewにProductsテーブルを表示するとき、「単価」列に「¥」記号を表示するサンプルを作成します。このサンプルは、以下のノウハウを習得することができます。
▼ BoundFieldをフォーマットする方法
▼ 編集時にもフォーマットを適用させる方法
▼ データベースに編集データを反映するときフォーマット情報を除去する方法

図「単価」をフォーマットして表示
1. 新規Webページ作成
ソリューションエクスプローラのプロジェクトの右クリックから[新しい項目の追加]を選択して、新規Webページ「GridView06StepUp1.aspx」を作成します。
2. コントロール作成
デザイナにGridView06StepUp1.aspxが表示されたら、GridView06.aspxのデザイナからSqlDataSource1、SqlDataSource2、GridView1をコピー&貼り付けします。
3. 列の編集
「GridViewタスク」メニューから[列の編集]を選択します。「フィールド」が表示されたら、「選択されたフィールド」から[単価]を選択します。右側のBoundFieldプロパティからDataFormatStringプロパティに「{0:c0}」を入力します。ApplyFormatInEditModeプロパティにはTrueを設定したら[OK]をクリックして閉じます。
Note
|
GridViewの列をフォーマットするときの注意事項 DataFormatStringに書式を設定するときは、HtmlEncodeプロパティに「False」を設定する必要があります。 |

図 「単価」をフォーマットする
4. イベントハンドラの追加
デザインの右クリックから[コードの表示]を選択します。コードビューが表示されたら、クラス名のドロップダウンリストから[GirdView1]、メソッド名のドロップダウンリストから[RowUpdating]を選択します。GridView1_RowUpdatingのイベントハンドラが作成されたら、次のコードを追加します。
Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
Dim strUnitPrice As String = e.NewValues("UnitPrice").ToString()
If strUnitPrice.StartsWith("\") Then
e.NewValues("UnitPrice") = strUnitPrice.Substring(1)
End If
End Sub
5. ブラウザに表示
VWD 2005のツールバーから[デバッグの開始]ボタンをクリックしてブラウザに表示します。ブラウザが起動されて、GridViewにProductsテーブルが表示されます。「単価」の列には、金額の先頭に「\」が付加されて表示されます。また、小数点以下の数字は表示されません。[編集]ボタンをクリックしたときも、単価がフォーマットされて表示されます。

図 「単価」がフォーマットされて表示された
◆解説
「単価」の円記号を付加して表示するには、BoundFieldのDataFormatStringプロパティに「{0:c}」を設定します。金額の小数点以下を表示したくないときは、「{0:c0}」のように「c」の後に小数点以下の桁数を指定します。GridViewから[編集]ボタンをクリックしたときにフォーマットを継承させるには、ApplyFormatInEditModeプロパティに「True」を設定します。
<asp:BoundField
DataField="UnitPrice"
HeaderText="単価"
SortExpression="UnitPrice"
ApplyFormatInEditMode="True"
DataFormatString="{0:c0}"
HtmlEncode="False" />
GridViewからレコードを編集するとき、単価に円記号(¥)を付加した状態で[更新]ボタンをクリックするとエラーになります。ASP.NETは、円記号を除去してくれませんので、アプリケーション側にて余分なフォーマット情報を除去する必要があります。単価から円記号を除去するには、GridViewにRowUpdatingイベントハンドラを追加します。このイベントハンドラでは、GridViewUpdateEventArgsのNewValuesコレクションから単価(UnitPrice)の更新後のデータを取得して円記号を除去します。金額にコマンド「123,456」が含まれるときは正常に動作しますのでコンマを除去する必要ありません。
Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView1.RowUpdating
Dim strUnitPrice As String = e.NewValues("UnitPrice").ToString()
If strUnitPrice.StartsWith("\") Then
e.NewValues("UnitPrice") = strUnitPrice.Substring(1)
End If
End Sub