SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「Dojo道場」~実用アプリ構築のためのベストプラクティス

Dojo道場 ~ 第3回「DataGridをもっと使いこなす」

「Dojo道場」~実用アプリ構築のためのベストプラクティス

TreeGrid

 DataGridの拡張ウィジェットとしてはTreeGridも提供されています。TreeGridは、データAPI経由でアクセスされるツリー構造を持ったデータをDataGridで表示するためのものです。複数の階層のデータを、フォルダを開いたり、閉じたりする要領で閲覧できます。

 TreeGridを有効に利用するには、まずデータ・ストアで階層構造を持ったデータを提供する必要があります。これまでサンプルで使ってきたデータをグループとそのメンバーの2階層で構成されるデータ構造に変更します。

var myDataStore = new dojo.data.ItemFileWriteStore({data: {items: [
    {group: 1, members: [    
        {name: "山田民子", email: "yamada@ibm.com",
            birthDate: 586882800000, photo: "images/photo4.gif"},
(中略)
    ]},
    {group: 2, members: [
        {name: "佐藤花子", email: "satoh@ibm.com",
            birthDate: 450457200000, photo: "images/photo2.gif"},
(中略)
    ]},
    {group: 3, members: [
        {name: "鈴木一郎", email: "suzuki@ibm.com",
            birthDate: 250555200000, photo: "images/photo1.gif"},
(中略)
    ]}
], label: "name"}});

 TreeGridでは、内部でデータAPIのgetLabelAttributesメソッドを使用します。ItemFileWriteStoreでは、labelプロパティで、labelとして使われる属性を指定できます。

 次にビュー定義で階層構造の表示方法を記述します。データ・ストアのmembers属性が2階層目の項目リストになるようにchildrenプロパティで記述しています。

var myStructure = [
    {cells: [[
        {name: "グループ", field: "group", width: "60px",
            formatter: myGroupFormatter},
        {field: "members", children: [
            {name: "画像", field: "photo", width: "50px",
                formatter: myImageFormatter},
            {name: "名前", field: "name", width: "auto"},
            {name: "メールアドレス", field: "email", width: "auto"},
            {name: "生年月日", field: "birthDate", width: "auto",
                formatter: myDateFormatter}
        ], aggregate: "value"}
    ]]}
];

 aggregateプロパティには、以下の集計のタイプ(TreeGridの集計メソッド名)を指定することができます。

  • sum
  • 階層化されたフィールドの数値データを累計して、集計結果として表示します。省略時値です。

  • cnt
  • 階層化されたフィールドが値を持つ個数をカウントして、集計結果として表示します。labelとして指定された属性に対しては、自動的にcntが使われます。

  • value
  • 空の集計メソッドとして定義されているので、集計を表示しません。

 TreeGridをマークアップで作成して、上記のデータ・ストアとビューの定義を指定します。

<table dojoType="dojox.grid.TreeGrid" id="myTreeGrid"
    style="width: 500px; height: 200px;"
    store="myDataStore" structure="myStructure"></table>
実行結果
実行結果

 次の画面は「-」アイコンをクリックして「家族」グループを閉じた状態です。家族グループのメンバーの数(3)が集計されて表示されています。

実行結果
実行結果

 数値データの場合は、カラムごとの数値の集計ができますので、ビジネス・アプリケーションではさらに威力を発揮するでしょう。

まとめ

 今回紹介したように、DataGridやその拡張ウィジェットには、アプリケーションの機能要件を満たすためのさまざまな機能が提供されています。これらの機能と他のウィジェットやこのシリーズの最初で取り上げたグラフ機能などを組み合わせることで、高機能で使いやすいUIを備えたWebアプリケーションを構築することができます。また、DataGridは前回の記事で解説されているデータAPIを利用しているので、サーバー上で提供されるサービスに効率よくアクセスできるというメリットもあります。Webブラウザーでアクセスできる使い勝手のよいビジネス・アプリケーションの構築にぜひDataGridを活用してください。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
「Dojo道場」~実用アプリ構築のためのベストプラクティス連載記事一覧

もっと読む

この記事の著者

野口 雅人(ノグチ マサト)

日本アイ・ビー・エム株式会社 ソフトウェア開発研究所 シニア・テクニカ ル・スタッフ・メンバー1990年、日本IBM入社。ホームページ・ビルダー、Rational Application Developer などの製品開発に従事。現在はWeb 2.0/RIA関連のソフトウェア開発を担当。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5640 2010/12/27 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー