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}
}
}
}
}
詳しい解説有難うございました。
|