Curl Global Community
RecordGridのカラム名変更について - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: RecordGridのカラム名変更について (/showthread.php?tid=244)



RecordGridのカラム名変更について - onyo - 08-27-2011

RecordField.caption は getter しかありませんが、
caption を指定しているときに、後から動的にカラム名を変更することは可能でしょうか?
どなたか、ご教授頂きたくお願い致します。


RE: RecordGridのカラム名変更について - onyo - 08-27-2011

過去ログを追いましたら、
header-spec を使えばなんとかなりそうな気がしてきました。
なかなか情報が少ないだけに Curl Global Community はとても助かりますね。

追記です。 再描画は対応できますが、途中でってのは無理なのでしょうか。
Code:
{let public japanese?:bool = true}
{define-enum public HeaderJ
    First = "名前",
    Last = "苗字",
    Age = "年齢"
}
{define-proc public {make-header rgc:RecordGridColumn}:Graphic
    let s:String = rgc.field.name
    {if japanese? then
        {for h in HeaderJ do
            {if h.name == rgc.field.name then
                set s = h.value
                {break}
            }
        }
    }
    {return
        {TextFlowBox
            s
        }
    }
  }
{let people:RecordSet =
    {RecordSet
        {RecordFields
            {RecordField
                "First", caption = "First Name", domain = String
            },
            {RecordField
                "Last", caption = "Last Name", 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}
    }
}
{let rg:RecordGrid =
    {RecordGrid
        header-spec = make-header,
        record-source = people,
        height = 3cm
    }
}
{set japanese? = false}
{let rg2:RecordGrid =
    {RecordGrid
        header-spec = make-header,
        record-source = people,
        height = 3cm
    }
}
{value {VBox rg,rg2}}



RE: RecordGridのカラム名変更について - Yuhki - 09-06-2011

>再描画は対応できますが、途中でってのは無理なのでしょうか。
途中でってのはなにかのイベントのタイミングってことでしょうか?
であればheader-specを設定し直せば更新されますよ。
特定のカラムのみでよければRecordGridColumn.header-specを設定してもOKです。

***ただし注意が必要です***
上記ソースで単純にRecordGridのheader-specに対して
make-headerを設定し直しても更新されません。
header-specはローカルオプションとして定義されており、
設定された値(またはオブジェクト)が変更されたときにオプションの
定義時にかかれたソースが実行されることが原因と推測されます。

Code:
--上記ソースの続き
{let rg:RecordGrid =
     {RecordGrid
         header-spec = make-header,
         record-source = people,
         height = 3cm
     }
}
{set japanese? = false}
{let rg2:RecordGrid =
     {RecordGrid
         header-spec = make-header,
         record-source = people,
         height = 3cm
     }
}

{value
    {VBox rg,rg2,
        {CommandButton
            label = "OK",
            {on Action do
                set rg.header-spec =
                    {proc {rgc:RecordGridColumn}:Graphic
                        let s:String = rgc.field.name
                        {if japanese? then
                            {for h in HeaderJ do
                                {if h.name == rgc.field.name then
                                    set s = h.value
                                    {break}
                                }
                            }
                        }
                        {return
                            {TextFlowBox
                                s
                            }
                        }
                    }
            }
        },
        {CommandButton
            label = "NG",
            {on Action do
                set rg.header-spec = make-header
            }
        }
    }
}



RE: RecordGridのカラム名変更について - onyo - 09-06-2011

Yuhki 様

>make-headerを設定し直しても更新されません
当にここにハマっておりました。
なるほど。ローカルオプション故ですね。
因みに、プロシージャ再利用のためには
下のように書けば済みますね。

Code:
{CommandButton
    label = "OKProc",
    {on Action do
        set rg.header-spec =
            {proc {rgc:RecordGridColumn}:Graphic
                {return
                    {make-header rgc}
                }
            }
    }
}


詳しい解説有難うございました。