RecordGridのセルに色をつける

RecordGridで任意のセルに色をつけたい場合は、RecordGridCellをカスタマイズする必要があります。

ここでは、データを更新したセルに色をつける実装方法について紹介します。

サンプルソース

{define-class public ColorCell {inherits StandardStringCell}

  {constructor public {default}
    {construct-super}
  }

  ||セルの色を制御するにはrefresh-dataメソッドを
  ||オーバーライドします。

  {method public {refresh-data}:void

    ||スーパークラスのメソッドを呼び出します。
    {super.refresh-data}

    {if-non-null record:Record = self.record
     then
        ||当該セルのデータが更新された場合に、
        ||背景色を設定します。
        {if {record.field-pending-update? self.column.field-name}
         then
            set self.background = “pink”
        }
    }
   
  }

 
}

{let people:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField “First”, domain = String},
            {RecordField “Last”, domain = String},
            {RecordField “Age”, domain = int}
        },
        {RecordData First = “John”, Last = “Smith”, Age = 25},
        {RecordData First = “Jane”, Last = “Smith”, Age = 29},
        {RecordData First = “Jane”, Last = “Jones”, Age = 28}
    }
}

||データを更新します。
{do
    let r:Record = {non-null {people.select-one}}

    {r.set “Last”,”Update”}
}

{value
    {RecordGrid
        record-source = people,
        height = 3cm,
        ||cell-specで上記で作成したセルを指定します。
        cell-spec = ColorCell
    }
}

これを実行すると、以下のような結果が表示されます。データを編集すると、編集したセルの色がピンクになります。

colorcell.jpg