RecordGrid でDropdownList を表示 - umemura - 07-26-2011
RecordGrid の中で、DropdownList を利用するにはどうすればいいのでしょうか。
RE: RecordGrid でDropdownList を表示 - umemura - 07-26-2011
RecordSet のRecordField のdomain をenum(列挙型)で指定すれば簡単にRecordGridの中でDropdownListが使えるのが分かりました。
ただ、これだと、列挙型のvalue ではなく、name がリストアイテムになってしまいます。(valueをリストアイテムにしたい)
また、動的にリストアイテムを変更することもできません。
そこで、StandardDropdownCel を継承して新しいカスタムセルを作ろうと思ったのですが、
リストアイテムをどのように追加すれば良いか分かりません。
分かる方がいたら教えてください。
RE: RecordGrid でDropdownList を表示 - hmino - 07-27-2011
domainにStandardStringDomainなどを使い方法はためしましたか?
デフォルトコンストラクタのパラメータのallowable-valueにリストに出したい値を設定すればドロップダウンリストとして出力されますよ。
Code: {let people:RecordSet =
{RecordSet
{RecordFields
{RecordField "First", domain = String},
{RecordField "Last", domain = {StandardStringDomain
default-value = "",
allowable-values = {{Array-of String}
"","Mino","Okada","Mori"
}
}
},
{RecordField "Age", domain = int}
},
{RecordData First = "Monta", Last = "", Age = 18},
{RecordData First = "Hitoshi", Last = "", Age = 20},
{RecordData First = "Akira", Last = "", Age = 40}
}
}
{value
{RecordGrid
record-source = people,
height = 3cm
}
}
RE: RecordGrid でDropdownList を表示 - umemura - 08-16-2011
(07-27-2011, 02:22 PM)hmino Wrote: domainにStandardStringDomainなどを使い方法はためしましたか?
デフォルトコンストラクタのパラメータのallowable-valueにリストに出したい値を設定すればドロップダウンリストとして出力されますよ。
StandardStringDomain の使い方を教えていただき、ありがとうございました。
ただ、提示いただいた方法では、グリッド上で指定した値がそのままレコードの値となると認識しています。
列挙型のname と value を、DropdownList のlabel とvalue に対応させるイメージで考えていたので、
下記のように実装してみました。
少しformatメソッドの記述方法が煩雑になっているので、
もっと簡潔な方法があれば教えてください。
Code: ||列挙体を RecordGrid (ReocrdSet)で利用するためのドメインクラス
{define-class public EnumDomain
{inherits StandardStringDomain}
field enum-type:EnumType
{constructor public {default
enum-type:EnumType
}
set self.enum-type = enum-type
def ary-string:{Array-of String} = {new {Array-of String}}
||「指定なし」用のvalueを追加
{ary-string.append ""}
{with-compiler-directives allow-any-calls? = true do
{for e in self.enum-type do
{ary-string.append (e.name asa String)}
|| {ary-string.append e.value asa String}
}
}
{construct-super
default-value = "",
allowable-values = ary-string
}
}
{method public {format x:any}:String
{switch x
case "" do
{return "指定しない"}
else
|| {return x asa String }
let return-val:String = ""
def val = {self.enum-type.new-from-name
(x asa String)
}
{with-compiler-directives
allow-implicit-any-casts? = true,
allow-any-calls? = true
do
set return-val = val.value
}
{return return-val }
}
}
}
RE: RecordGrid でDropdownList を表示 - nmyzk - 08-17-2011
enum型を使うのではどうでしょうか?
Code: {define-enum Bear
polar = "endangered",
grizzly = "threatened",
panda = "cute",
pooh = "abundant"
}
{let f:Frame = {Frame}}
{let people:RecordSet =
{RecordSet
{RecordFields
{RecordField
"First", domain = Bear
},
{RecordField
"Last", domain = String, default-value = "LAST"
},
{RecordField
"Age", domain = int, default-value = 99
}
},
{RecordData First = Bear.polar, Last = "Smith", Age = 25},
{RecordData First = Bear.polar, Last = "Smith", Age = 29},
{RecordData First = Bear.polar, Last = "Jones", Age = 28},
{on e:RecordModified do
{f.add (e.record["First"] asa Bear).value,replace? = true}||ここで値が取れる
}
}
}
{let rg:RecordGrid =
{RecordGrid
height = 3cm, width = 10cm, record-source = people
}
}
{value
{VBox
rg,
f
}
}
RE: RecordGrid でDropdownList を表示 - umemura - 12-24-2013
列挙体や、StandardStringDomain の allowable-value を使う方法では、
マスタから区分の一覧を取得して、その一覧をリストに表示する、
といった、動的なリストの生成が難しいと思っています。
(RecordField.domain が後で変更可能であれば良いのですが・・・)
また、DropdownList のリストアイテムに ListValueitem を利用して、
コードとラベルを分けて表示する、ということが出来ません。
create-editor で、生成された DropdownList にアイテムを設定する方法だと、
下記のような感じになるかと思います。
Code: {define-class public CustomDropdownCell {inherits StandardDropdownCell}
||DropdownList のリストアイテム
field public list-items:{Array-of ListValueItem} = {new {Array-of ListValueItem}}
{constructor public {default
list-items:#{Array-of ListValueItem} =null
}
{if-non-null list-items then
set self.list-items = list-items
}
{construct-super}
}
||ドロップダウンリストに、アイテムを設定
{method public {create-editor}:DropdownList
def cell-dl = {super.create-editor}
{for itm in self.list-items do
{cell-dl.append itm}
}
{return cell-dl}
}
||リストで選択されたアイテムのラベルを文字列として取得
{method public {format x:any}:String
let txt:String = ""
def val = {self.get-data}
def found-index =
{self.list-items.find
{ListValueItem val},
equality-proc =
{proc {itm1:ListValueItem, itm2:ListValueItem}:bool
{if itm1.init-value == itm2.init-value then
{return true}
else
{return false}
}
}
}
{if found-index > -1 then
def select-item = {self.list-items.get found-index}
set txt = {select-item.get-text}
}
{return txt}
}
}
{define-class public CustomDropdownColumn {inherits RecordGridColumn}
{constructor public {default
list-items:#{Array-of ListValueItem} =null,
...}
{construct-super {splice ...}}
set self.cell-spec =
{proc {col:RecordGridColumn}:RecordGridCell
def cell = {CustomDropdownCell list-items = list-items}
{return cell}
}
}
}
{let people:RecordSet =
{RecordSet
{RecordFields
{RecordField "First", domain = String},
{RecordField "Last", 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}
}
}
{def grid =
{RecordGrid
record-source = people,
{CustomDropdownColumn
"First",
list-items =
{{Array-of ListValueItem}
{ListValueItem "", label = ""},
{ListValueItem "John", label = "ジョン"},
{ListValueItem "Jane", label = "ジェーン"},
{ListValueItem "Joe", label = "ジョー"}
}
}
}
}
{value grid}
グリッド内のドロップダウンリストを表示する方法で、
もっとよい方法があれば教えてください。
RE: RecordGrid でDropdownList を表示 - kudoa - 02-15-2014
素人の質問でもうしけありません。
{def grid =
{RecordGrid
record-source = people,
{CustomDropdownColumn
"First",
list-items =
{{Array-of ListValueItem}
{ListValueItem "", label = ""},
{ListValueItem "John", label = "ジョン"},
{ListValueItem "Jane", label = "ジェーン"},
{ListValueItem "Joe", label = "ジョー"}
}
}
}
}
とRecordGridに対してCustomDropdownColumnをアサインされておられますが、VLEにて予めRecordGridが使用されていた際は、どの様にしてCustomDropdownColumnをアサインすれば宜しいでしょうか。
アドバイス頂ければ幸いです。
RE: RecordGrid でDropdownList を表示 - dyoshida - 02-16-2014
予め生成されているRecordGridに対して設定する場合は、RecordGrid.columnsに設定してはどうでしょうか?
Code: {def grid =
{RecordGrid
record-source = people
}
}
{do
set grid.columns =
{new {Array-of RecordGridColumn},
{CustomDropdownColumn
"First",
list-items =
{{Array-of ListValueItem}
{ListValueItem "", label = ""},
{ListValueItem "John", label = "ジョン"},
{ListValueItem "Jane", label = "ジェーン"},
{ListValueItem "Joe", label = "ジョー"}
}
},
{RecordGridColumn "Last"},
{RecordGridColumn "Age"}
}
}
RE: RecordGrid でDropdownList を表示 - kudoa - 02-16-2014
dyoshida様、ご返信頂き有り難う御座いました、助かりました。
又、uememura様には、いつも有益な情報感謝いたします。
RE: RecordGrid でDropdownList を表示 - watanabe - 06-24-2015
CDBCでOracleデータベースから取得する場合
ソース:
{let connection:BasicConnection =
{BasicConnection {url "http://localhost:8080/cdbc-server/CdbcServlet"}}
}
{let rs:RecordSet = {connection.create-record-set "SAMPLE_USER", "employee"}}
【employee】テーブルのSEX列値は"0"と"1"です。
RecordGridで、SEX列を(0:Male, 1:Female)の2項目を含むドロップダウンリスト形で表示させたい場合、
どのようなコーディングを行えば良いでしょうか。
よろしくお願いいたします
|