Thread Rating:
  • 460 Vote(s) - 2.71 Average
  • 1
  • 2
  • 3
  • 4
  • 5
RecordGridのカラム名変更について
08-27-2011, 02:44 PM,
#1
RecordGridのカラム名変更について
RecordField.caption は getter しかありませんが、
caption を指定しているときに、後から動的にカラム名を変更することは可能でしょうか?
どなたか、ご教授頂きたくお願い致します。
08-27-2011, 04:50 PM, (This post was last modified: 08-30-2011, 06:16 PM by onyo.)
#2
Lightbulb  RE: RecordGridのカラム名変更について
過去ログを追いましたら、
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}}
09-06-2011, 01:27 PM,
#3
RE: RecordGridのカラム名変更について
>再描画は対応できますが、途中でってのは無理なのでしょうか。
途中でってのはなにかのイベントのタイミングってことでしょうか?
であれば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
            }
        }
    }
}
09-06-2011, 01:55 PM,
#4
RE: RecordGridのカラム名変更について
Yuhki 様

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

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


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

Forum Jump:


Users browsing this thread:
3 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('244')