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=1270)



同名RecordGridを何度も生成したときの挙動 - da-itoh - 10-22-2015

以下のように呼ばれる度にVboxをクリアして同じ名前のRecordGridを追加するメソッドを作ったのですが、
2回目以降に呼ばれた際にグリッドのヘッダにcaptionの値が表示されません。
同じロジックでRecordGrid.nameを毎回違う名前にすると正常に動作するため、
追加した同名のRecordGridが残り続けていてそれが原因になっているのでは?と思ったのですが、
解決方法がわかりましたらご教授願います。

field package vb-detail-area:VBox
{method private {get-rg first-time?:bool}:void
let fields:{Array-of RecordField} = {new {Array-of RecordField}}
let rgc:{Array-of RecordGridColumn} = {new {Array-of RecordGridColumn}}

{self.vb-detail-area.clear}
{if first-time? then
{rgc.append {RecordGridColumn "row-header"}}
{rgc.append {RecordGridColumn "detail-amount-1"}}
{rgc.append {RecordGridColumn "detail-amount-2"}}
{rgc.append {RecordGridColumn "detail-amount-3"}}
{fields.append {RecordField "row-header", caption = "", domain = String}}
{fields.append {RecordField "detail-amount-1",caption= "初回1"}}
{fields.append {RecordField "detail-amount-2",caption= "初回2"}}
{fields.append {RecordField "detail-amount-3",caption= "初回3"}}
else
{rgc.append {RecordGridColumn "row-header"}}
{rgc.append {RecordGridColumn "detail-amount-1"}}
{rgc.append {RecordGridColumn "detail-amount-2"}}
{rgc.append {RecordGridColumn "detail-amount-3"}}
{rgc.append {RecordGridColumn "detail-amount-4"}}
{fields.append {RecordField "row-header", caption = "", domain = String}}
{fields.append {RecordField "detail-amount-1",caption= "2回目1"}}
{fields.append {RecordField "detail-amount-2",caption= "2回目2"}}
{fields.append {RecordField "detail-amount-3",caption= "2回目3"}}
{fields.append {RecordField "detail-amount-4",caption= "2回目4"}}
}
{self.vb-detail-area.add
{RecordGrid width = {make-elastic}, height = 165px, name = "rg-detail-1", {splice rgc}}
}

set self.rg-detail-1 = {g "rg-detail-1"} asa RecordGrid
set self.rg-detail-1.record-source = {RecordSet {RecordFields {splice fields}}}
}





RE: 同名RecordGridを何度も生成したときの挙動 - dyoshida - 10-22-2015

問題が起きているコードの一部抜粋のようなので推測ですが、
get-rgメソッドの中でfield vb-detail-areaに新しいRecordGridを格納した
Vboxをセットしていますが、これは画面に反映されていないようにも見えます。

また、下段で既に画面に追加されているRecordGridを取得して、record-sourceを
更新しているように見受けられますが、このRecordGridのヘッダを更新するのが
目的でしたら、Vboxごと入れ替えずに下記のコードで変更できないでしょうか?
Code:
set self.rg-detail-1 = {g "rg-detail-1"} asa RecordGrid
   set self.rg-detail-1.columns = rgc
   set self.rg-detail-1.record-source = {RecordSet {RecordFields {splice fields}}}



RE: 同名RecordGridを何度も生成したときの挙動 - dyoshida - 10-22-2015

実現したかったことはこんな感じでしょうか?

Code:
{curl 8.0 applet}

{def rg = {RecordGrid}}

{define-proc {set-columns-and-fields
                 rg:RecordGrid,
                 first-time?:bool = false
             }:void
    let fields:{Array-of RecordField} = {new {Array-of RecordField}}
    let rgc:{Array-of RecordGridColumn} = {new {Array-of RecordGridColumn}}
    
    {if first-time? then
        {rgc.append {RecordGridColumn "row-header"}}
        {rgc.append {RecordGridColumn "detail-amount-1"}}
        {rgc.append {RecordGridColumn "detail-amount-2"}}
        {rgc.append {RecordGridColumn "detail-amount-3"}}
        {fields.append {RecordField "row-header", caption = "", domain = String}}
        {fields.append {RecordField "detail-amount-1",caption= "初回1"}}
        {fields.append {RecordField "detail-amount-2",caption= "初回2"}}
        {fields.append {RecordField "detail-amount-3",caption= "初回3"}}
     else
        {rgc.append {RecordGridColumn "row-header"}}
        {rgc.append {RecordGridColumn "detail-amount-1"}}
        {rgc.append {RecordGridColumn "detail-amount-2"}}
        {rgc.append {RecordGridColumn "detail-amount-3"}}
        {rgc.append {RecordGridColumn "detail-amount-4"}}
        {fields.append {RecordField "row-header", caption = "", domain = String}}
        {fields.append {RecordField "detail-amount-1",caption= "2回目1"}}
        {fields.append {RecordField "detail-amount-2",caption= "2回目2"}}
        {fields.append {RecordField "detail-amount-3",caption= "2回目3"}}
        {fields.append {RecordField "detail-amount-4",caption= "2回目4"}}
    }
    
    set rg.columns = rgc
    set rg.record-source = {RecordSet {RecordFields {splice fields}}}
}

{value
    {VBox
        rg,
        {CommandButton
            label = "1回目",
            {on Action do
                {set-columns-and-fields
                    rg,
                    first-time? = true
                }
            }
        },
        {CommandButton
            label = "2回目",
            {on Action do
                {set-columns-and-fields
                    rg,
                    first-time? = false
                }
            }
        }
    }
}



RE: 同名RecordGridを何度も生成したときの挙動 - da-itoh - 10-22-2015

回答ありがとうございます。
回答内容でグリッドヘッダー、カラム数等は変更できる事を確認しました。
が、もう1つやりたい事がありまして実際はRecordGridColumnGroupがあり”set rg.columns = rgc”では設定できません。RecordGridColumnGroupの設定方法がありましたら、ご教示下さい。




RE: 同名RecordGridを何度も生成したときの挙動 - dyoshida - 10-22-2015

CurlドキュメントのRecordGridのcolumns (アクセサ)の説明をみると
「列グループを維持するには、代わりに RecordGrid.base-columns を使用します。」とあるので

・セット先をRecordGrid.columns →RecordGrid.base-columnsに変更、
・base-columns (アクセサ)の型が{Array-of BaseRecordGridColumn}なので、格納変数rgcの型も変更

とすれば、RecordGridColumnGroupもBaseRecordGridColumnを継承しているので指定できるように
なるかと思います。

こんな感じになるのでは

Code:
{curl 8.0 applet}

{def rg = {RecordGrid}}

{define-proc {set-columns-and-fields
                 rg:RecordGrid,
                 first-time?:bool = false
             }:void
    let fields:{Array-of RecordField} = {new {Array-of RecordField}}
    let rgc:{Array-of BaseRecordGridColumn} = {new {Array-of BaseRecordGridColumn}}
        
    {if first-time? then
        {rgc.append {RecordGridColumn "row-header"}}
        {rgc.append
            {RecordGridColumnGroup
                "group1",
                {RecordGridColumn "detail-amount-1"},
                {RecordGridColumn "detail-amount-2"},
                {RecordGridColumn "detail-amount-3"}
            }
        }
        
        {fields.append {RecordField "row-header", caption = "", domain = String}}
        {fields.append {RecordField "detail-amount-1",caption= "初回1"}}
        {fields.append {RecordField "detail-amount-2",caption= "初回2"}}
        {fields.append {RecordField "detail-amount-3",caption= "初回3"}}
     else
        {rgc.append {RecordGridColumn "row-header"}}
        {rgc.append
            {RecordGridColumnGroup
                "group1",
                {RecordGridColumn "detail-amount-1"},
                {RecordGridColumn "detail-amount-2"}
            }
        }
        {rgc.append
            {RecordGridColumnGroup
                "group2",
                {RecordGridColumn "detail-amount-3"},
                {RecordGridColumn "detail-amount-4"}
            }
        }
        
        {fields.append {RecordField "row-header", caption = "", domain = String}}
        {fields.append {RecordField "detail-amount-1",caption= "2回目1"}}
        {fields.append {RecordField "detail-amount-2",caption= "2回目2"}}
        {fields.append {RecordField "detail-amount-3",caption= "2回目3"}}
        {fields.append {RecordField "detail-amount-4",caption= "2回目4"}}
    }
    
    set rg.base-columns = rgc
    set rg.record-source = {RecordSet {RecordFields {splice fields}}}
}

{value
    {VBox
        rg,
        {CommandButton
            label = "1回目",
            {on Action do
                {set-columns-and-fields
                    rg,
                    first-time? = true
                }
            }
        },
        {CommandButton
            label = "2回目",
            {on Action do
                {set-columns-and-fields
                    rg,
                    first-time? = false
                }
            }
        }
    }
}



RE: 同名RecordGridを何度も生成したときの挙動 - da-itoh - 10-22-2015

早々の回答ありがとうございます。
さっそく試してみます。



RE: 同名RecordGridを何度も生成したときの挙動 - da-itoh - 10-22-2015

ありがとうございました。
思い通りの処理が出来ました。