RecordGridのformat-specの使用法

RecordGrid.format-specはグリッド上における値の表示方法を制御するためのプロシージャです。format-specを利用することで、簡単にマスタデータの参照が行えるようになります。 

サンプルコード:

||参照する元のデータを取得します。
{let people:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField “id”,domain = int},||データを一意にするIDを付加します。
            {RecordField “First”, domain = String},
            {RecordField “Last”, domain = String},
            {RecordField “Age”, domain = int}
        },
        {RecordData id = 1,First = “John”, Last = “Smith”, Age = 25},
        {RecordData id = 2,First = “Jane”, Last = “Smith”, Age = 29},
        {RecordData id = 3,First = “Jane”, Last = “Jones”, Age = 28}
    }
}

||値を入力する枠を作成します。
{let list:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField “id”,domain = int}
        },
        {RecordData},
        {RecordData},
        {RecordData}
       
    }
}

{bold 元のデータ}

{RecordGrid
    record-source = people,
    height = 3cm
}

{bold format-spec利用後}

{value
    {RecordGrid
        record-source = list,
        height = 3cm,
        automatic-columns? = false,
        {RecordGridColumn “id”},
        {RecordGridColumn
            “id”,
            ||cells-take-focus?を指定して
            ||直接編集できないようにします。
            cells-take-focus? = false,
            ||format-specを利用して表示するデータを取得します。
            format-spec =
                {proc {val:any}:String
                    ||
                    let r:#Record =
                        {people.select-one
                            filter = {RecordData id = val}
                        }
                   
                    {return
                        {if-non-null r
                         then
                            ||peopleにデータが存在した場合はデータを表示します。
                            {String r[“First”] , ” ” , r[“Last”]}
                         else
                            ||存在しなかった場合は空の文字列を返します。
                            “”
                        }
                    }
                }
        }
    }
}

 

このコードを実行し、下のグリッドにidを入力すると、変数peopleに登録されているFirstとLastの値が2列目に表示されます。

実行結果

 format-spec.jpg