Post Reply 
 
Thread Rating:
  • 270 Votes - 2.69 Average
  • 1
  • 2
  • 3
  • 4
  • 5
RecordGrid でDropdownList を表示
07-26-2011, 08:44 AM
Post: #1
RecordGrid でDropdownList を表示
RecordGrid の中で、DropdownList を利用するにはどうすればいいのでしょうか。
Find all posts by this user
Quote this message in a reply
07-26-2011, 08:48 AM
Post: #2
RE: RecordGrid でDropdownList を表示
RecordSet のRecordField のdomain をenum(列挙型)で指定すれば簡単にRecordGridの中でDropdownListが使えるのが分かりました。

ただ、これだと、列挙型のvalue ではなく、name がリストアイテムになってしまいます。(valueをリストアイテムにしたい)

また、動的にリストアイテムを変更することもできません。



そこで、StandardDropdownCel を継承して新しいカスタムセルを作ろうと思ったのですが、

リストアイテムをどのように追加すれば良いか分かりません。



分かる方がいたら教えてください。
Find all posts by this user
Quote this message in a reply
07-27-2011, 02:22 PM
Post: #3
RE: RecordGrid でDropdownList を表示
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
    }
}
Find all posts by this user
Quote this message in a reply
08-16-2011, 03:37 PM
Post: #4
RE: RecordGrid でDropdownList を表示
(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 }
    }
  }
  
  
}
Find all posts by this user
Quote this message in a reply
08-17-2011, 04:29 PM
Post: #5
RE: RecordGrid でDropdownList を表示

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
    }        
}
Find all posts by this user
Quote this message in a reply
12-24-2013, 01:36 PM
Post: #6
RE: RecordGrid でDropdownList を表示
列挙体や、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}

グリッド内のドロップダウンリストを表示する方法で、
もっとよい方法があれば教えてください。
Find all posts by this user
Quote this message in a reply
02-15-2014, 08:34 PM
Post: #7
RE: RecordGrid でDropdownList を表示
素人の質問でもうしけありません。

{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をアサインすれば宜しいでしょうか。
アドバイス頂ければ幸いです。
Find all posts by this user
Quote this message in a reply
02-16-2014, 06:44 PM
Post: #8
RE: RecordGrid でDropdownList を表示
予め生成されている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"}
        }
}
Find all posts by this user
Quote this message in a reply
02-16-2014, 10:30 PM
Post: #9
RE: RecordGrid でDropdownList を表示
dyoshida様、ご返信頂き有り難う御座いました、助かりました。

又、uememura様には、いつも有益な情報感謝いたします。
Find all posts by this user
Quote this message in a reply
06-24-2015, 12:26 PM
Post: #10
RE: RecordGrid でDropdownList を表示
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項目を含むドロップダウンリスト形で表示させたい場合、
どのようなコーディングを行えば良いでしょうか。

よろしくお願いいたします
Find all posts by this user
Quote this message in a reply
Post Reply 


Possibly Related Threads...
Thread: Author Replies: Views: Last Post
  RecordGrid の行の実際の高さの調べ方 kay 2 1,610 03-01-2016 06:14 PM
Last Post: kay
  RecordGrid 列の表示/非表示について Yudai-s 2 2,866 05-19-2015 06:54 PM
Last Post: Yudai-s
  RecordGrid のセル単位のフォーカス制御方法 kay 2 2,080 03-06-2015 06:34 PM
Last Post: kay
  RecordGrid のセルのフォーカス可否制御 kay 2 2,305 03-02-2015 07:56 PM
Last Post: kay
  RecordGrid の縦のスクロールバー umemura 3 3,910 01-20-2014 10:38 AM
Last Post: umemura
  RecordGrid のパフォーマンスについて umemura 8 10,138 01-06-2014 02:34 PM
Last Post: umemura
  RecordGrid の NavigationPanel について umemura 2 4,026 08-23-2011 08:52 AM
Last Post: c-s
  RecordGrid で オートコンプリート umemura 1 3,797 07-29-2011 10:58 PM
Last Post: umemura
  RecordGrid での右詰め umemura 3 4,695 07-29-2011 01:32 PM
Last Post: c-s
Forum Jump:


User(s) browsing this thread:
1 Guest(s)