Excelのようなデータの表現と操作性を持つRecordGrid
RecordGridはCurlのGUIの1つで、その操作性の高さから多くのアプリケーションで利用されています。また、プロパティを変更することでRecordGridの操作性や概観を変えられるため、機能を変更するのも比較的容易です。
RecordGridを使用するときには、RecordSetというデータクラスを使用します。RecordSetとはデータを行・列の形式で2次元に管理し、操作するためのAPIで、コンピュータのメモリにもよりますが何十万というレコードを格納することも可能です。
RecordSetを作成するときは、RecordFieldを用いてデータの列名を定義します。以下は、RecordGridとRecordSetを用いた簡単なサンプルの例です。このソースコードを実行すると、上図のようなグリッドが表示されます。
{curl 6.0 applet} {curl-file-attributes character-encoding = "shift-jis"} ||データを管理するRecordSetを定義します。 {let people:RecordSet = {RecordSet {RecordFields {RecordField "Delete", domain = bool,caption = "削除"}, {RecordField "Code", domain = String,caption = "品名コード"}, {RecordField "Name", domain = String,caption = "品名"}, {RecordField "Count", domain = int,caption = "数量"}, {RecordField "Price", domain = int,caption = "売上単価"}, {RecordField "Subtotal", domain = int,caption = "売上合計"} }, {RecordData Code = "A01", Name = "Windowsデスクトップ", Count = 1, Price = 76000, Subtotal = 76000}, {RecordData Code = "A02", Name = "Windowsノート", Count = 7, Price = 155000, Subtotal = 1085000}, {RecordData Code = "A03", Name = "Macデスクトップ", Count = 1, Price = 83000, Subtotal = 83000} } } ||データを表示するRecordGridを定義します。 {let rg:RecordGrid = {RecordGrid height = 3cm, width = 10cm, record-source = people } } {value rg}
RecordGridのカスタマイズ
さて、このさまざまな機能を持っているRecordGridですが、プロパティの変更や部品のカスタマイズを行うことでさらに機能を拡張できます。1つの例として、下図の売上単価や売上合計のように、数値の表示を変更する方法について見ていきましょう。
データの表示形式を変更するにはformat-specを利用します。format-specプロパティはRecordGrid、RecordGridColumn、RecordGridCellそれぞれに存在しています。そのため、データの表示形式の範囲をグリッド全体、列単位、セル単位という形で設定することが可能です。format-specを指定するときには、データの変更するロジックをプロパティで指定します。
下記のサンプルでは、format-specにてデータを円表記に変換する処理を指定しています。
{import * from CURL.LANGUAGE.FORMAT} {let formatter:NumberFormatter = {NumberFormatter.create-currency-formatter locale = {Locale "ja"} } } {do set formatter.grouping-size = 3 } {let rg:RecordGrid = {RecordGrid record-source = people, height = 3cm, {RecordGridColumn "Delete"}, {RecordGridColumn "Code" }, {RecordGridColumn "Name" }, {RecordGridColumn "Count" ,halign = "right"}, {RecordGridColumn "Price" , halign = "right" }, {RecordGridColumn "Subtotal", halign = "right", format-spec = {proc {value:any}:String {return {formatter.format value} } } } } } {value rg}