ASP.NET GridViewのホームへ戻る

GridViewの「単価」列に「\」を表示する (GridView06StepUp1.aspx)

 

GridViewProductsテーブルを表示するとき、「単価」列に「¥」記号を表示するサンプルを作成します。このサンプルは、以下のノウハウを習得することができます。

 

  BoundFieldをフォーマットする方法

  編集時にもフォーマットを適用させる方法

  データベースに編集データを反映するときフォーマット情報を除去する方法

 

図「単価」をフォーマットして表示

 

 

 

1. 新規Webページ作成

 

ソリューションエクスプローラのプロジェクトの右クリックから[新しい項目の追加]を選択して、新規Webページ「GridView06StepUp1.aspx」を作成します。

 

2. コントロール作成

 

デザイナにGridView06StepUp1.aspxが表示されたら、GridView06.aspxのデザイナからSqlDataSource1SqlDataSource2GridView1をコピー&貼り付けします。

 

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のツールバーから[デバッグの開始]ボタンをクリックしてブラウザに表示します。ブラウザが起動されて、GridViewProductsテーブルが表示されます。「単価」の列には、金額の先頭に「\」が付加されて表示されます。また、小数点以下の数字は表示されません。[編集]ボタンをクリックしたときも、単価がフォーマットされて表示されます。

 

図 「単価」がフォーマットされて表示された

 

 

◆解説

 

「単価」の円記号を付加して表示するには、BoundFieldDataFormatStringプロパティに「{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は、円記号を除去してくれませんので、アプリケーション側にて余分なフォーマット情報を除去する必要があります。単価から円記号を除去するには、GridViewRowUpdatingイベントハンドラを追加します。このイベントハンドラでは、GridViewUpdateEventArgsNewValuesコレクションから単価(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

 

ASP.NET GridViewのホームへ戻る