RecordGridでソートされた時に最終行だけ固定にしたい

【ご質問】
RecordGridではヘッダ行のセルをクリックするとレコードがソートされますが、
最下行は合計値を表示する行としたいので、
そこだけはソート時でも固定させたいと考えています。
これはどのようにすれば実現できるでしょうか。

【回答】
隠しフィールドを用意して、最下行に固定したいデータのみ1,
その他の全てのデータでは0という値を格納するといった方法があります。
ソート時にはこのカラムを常に第一キーとしてソートさせるようにします。

それだけですと昇順降順を切り替えたときに先頭行に来てしまいますので、
昇順降順が切り替えられたときでも、このカラムだけは
同じ方向でソートされるような作りこみが必要です。
以下のサンプルをご参照ください。

{curl 7.0,8.0 applet}

{let people:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField “First”, domain = String},
            {RecordField “Last”, domain = String},
            {RecordField “Age”, domain = int},
            || 合計行を最下行表示するための隠しフィールド
            {RecordField “hidden”, domain = int}
        },
        || hidden = 0
        {RecordData First = “Gene”, Last = “Smith”, Age = 25, hidden = 0},
        {RecordData First = “Fred”, Last = “Smith”, Age = 29, hidden = 0},
        {RecordData First = “Mike”, Last = “Jones”, Age = 28, hidden = 0},
        {RecordData First = “Ben”, Last = “Abrams”, Age = 25, hidden = 0},
        {RecordData First = “Ben”, Last = “Smith”, Age = 21, hidden = 0},
        {RecordData First = “Sam”, Last = “Jones”, Age = 22, hidden = 0},
        {RecordData First = “Nigel”, Last = “Stevens”, Age = 24, hidden = 0},
        {RecordData First = “Bert”, Last = “Stevens”, Age = 22, hidden = 0},
        {RecordData First = “Pat”, Last = “Linden”, Age = 27, hidden = 0},
        || 合計行のみ hidden = 1 とする
        {RecordData First = “TOTAL”, Last = “”, Age = 25+29+28, hidden = 1}
    }
}       
|| 昇順ならtrue
{let asc?:bool = true}       
|| 最後にソートした列名
{let last-sort-column:String = “”}

{def rg = {RecordGrid
                    record-source = people,
                    height = 10cm,
                    automatic-columns? = false,
                    {RecordGridColumn “First”},
                    {RecordGridColumn “Last”},
                    {RecordGridColumn “Age”},
                    || ソート方法を指定
                    sort = {RecordSort.from-string “hidden, Age”},
                    sort-spec = {proc {rgc:RecordGridColumn}:RecordSort
                                        || 異なる列をクリックしたら昇順に戻す
                                        {if last-sort-column != rgc.field-name then
                                            set asc? = true
                                        }
                                        || 第一ソートキー<hidden>, 第二ソートキー<クリックした列>
                                        || ただし降順時でも<hidden>は昇順ソート
                                        let rs:RecordSort =
                                            {RecordSort.from-string
                                                “hidden “ &
                                                {if asc? then
                                                    “asc”
                                                 else
                                                    “desc”
                                                }
                                                & “, “ & rgc.field-name
                                            }
                                        || ソートした列名とソート順を保存
                                        set last-sort-column = rgc.field-name
                                        set asc? = not asc?
                                        {return rs}
                                    }
            }
}
{value rg}