第4回 データグリッドの機能を知る
第4回 データグリッドの機能を知る
連載四回目となる今回は、データグリッドの機能をいくつか紹介していきたいと思います。
目次
今回は次の手順で作業を進めます。
- 準備
- レコードの並び替え(ソート)
- セルの操作
- ヘッダーの操作
- イベント定義
作業開始
準備
作業を始める前に、今回使用するHTMLファイルなどを準備しましょう。本稿では、前回の記事の内容をもとに進めたいと思います。 まずは、前回の記事で作成した「lesson03」フォルダをコピーして、「lesson04」フォルダにリネームします。続いて、lesson04フォルダ内にある「lesson03.html」を、「lesson04.html」にリネームします。最後に、下記の赤字コードの部分を、lesson04.htmlのコードに適用します。
lesson04.html
<html> <head> <title>Lesson04 - データグリッドの機能を知る</title> <link rel="stylesheet" type="text/css" href="codebase/dhtmlxgrid.css"> <script type="text/javascript" src="codebase/dhtmlxcommon.js"></script> <script type="text/javascript" src="codebase/dhtmlxgrid.js"></script> <script type="text/javascript" src="codebase/dhtmlxgridcell.js"></script> <script type="text/javascript"> <!-- var Lesson04 = function() { }; Lesson04.prototype = { init : function() { this.mygrid = new dhtmlXGridObject("mygrid"); this.mygrid.setImagePath("codebase/imgs/"); this.mygrid.setHeader("ID,Name,Description"); this.mygrid.setInitWidths("*,150,350"); this.mygrid.setColAlign("right,left,left"); this.mygrid.setSkin("light"); this.mygrid.init(); }, load : function() { var json = { rows: [ {id: 1, data: ["101", "山田太郎", "俳優"]}, {id: 2, data: ["102", "鈴木一郎", "会社員"]}, {id: 3, data: ["103", "斉藤花子", "フリーター"]}, {id: 4, data: ["104", "佐藤良子", "主婦"]}, {id: 5, data: ["105", "田中権蔵", "会社員"]} ] }; this.mygrid.parse(json, "json"); } }; window.onload = function() { var dataGrid = new Lesson04(); dataGrid.init(); dataGrid.load(); }; //--> </script> </head> <body> <h1>Lesson04 - データグリッドの機能を知る</h1> <div id="mygrid" style="width:600px;height:150px;"></div> </body> </html>
以上で準備は完了です。
レコードの並び替え(ソート)
グリッドに表示されたレコードを並び替える機能を追加してみましょう。 この機能を追加するには、グリッドを生成するときに「setColSorting」を使って並び替えに関する設定を行います。詳細は、下記のコードをご覧ください。
lesson04.html
init : function() { this.mygrid = new dhtmlXGridObject("mygrid"); this.mygrid.setImagePath("codebase/imgs/"); this.mygrid.setHeader("ID,Name,Description"); this.mygrid.setInitWidths("*,150,350"); this.mygrid.setColAlign("right,left,left"); this.mygrid.setColSorting("int,str,str"); this.mygrid.setSkin("light"); this.mygrid.init(); },
赤字コードの部分を、lesson04.htmlに追加してください。そして表示してみましょう。
図1. レコード並び替え前
図2. Nameでレコードを並び替え
ヘッダーをクリックすると、レコードが並び替わるのが分かると思います。 setColSortingに設定できるのは、以下のソートタイプです。
- int : 数値で並び替え
- str : 文字で並び替え
- date : 日付で並び替え
- na : 並び替え無し
- sortingFunction : 独自ソートの関数
上記のソートタイプを列数分だけカンマ区切りで設定すると、指定したソートタイプに対応した並び替え機能が適用されます。
セルの操作
現在はすべての列が編集可能になっていますが、特定の列のみ編集を許可することも可能です。 この機能を追加するには、グリッドを生成するときに「setColTypes」を使って列の属性を設定します。詳細は、下記のコードをご覧ください。
lesson04.html
init : function() { this.mygrid = new dhtmlXGridObject("mygrid"); this.mygrid.setImagePath("codebase/imgs/"); this.mygrid.setHeader("ID,Name,Description"); this.mygrid.setColTypes("ro,ro,ed"); this.mygrid.setInitWidths("*,150,350"); this.mygrid.setColAlign("right,left,left"); this.mygrid.setColSorting("int,str,str"); this.mygrid.setSkin("light"); this.mygrid.init(); },
赤字コードの部分をlesson04.htmlに追加して表示してみましょう。ID列とName列は編集不可に、Description列だけ編集可能になったと思います。
setColTypesに設定できるいくつかのカラムタイプを、以下に挙げておきます。
- ro : 読み取り専用
- ed : 編集セル
- txt : 複数行に対応した編集セル
- ch : チェックボックス
- ra : ラジオボタン
- coro : プルダウン
上記のカラムタイプを列数分だけカンマ区切りで設定すると、指定したカラムタイプに対応した列属性が適用されます。
ヘッダーの操作
ヘッダーを追加して複数行にしてみましょう。 この機能を追加するには、「attachHeader」を使って追加するヘッダーを設定します。なお、グリッド生成時以外でも、ヘッダー追加は可能です。詳細は、下記のコードをご覧ください。
lesson04.html
init : function() { this.mygrid = new dhtmlXGridObject("mygrid"); this.mygrid.setImagePath("codebase/imgs/"); this.mygrid.setHeader("ID,Name,Description"); this.mygrid.setColTypes("ro,ro,ed"); this.mygrid.setInitWidths("*,150,350"); this.mygrid.setColAlign("right,left,left"); this.mygrid.setColSorting("int,str,str"); this.mygrid.setSkin("light"); this.mygrid.init(); this.mygrid.attachHeader("(Num),(Str),(Str)"); },
赤字コードの部分をlesson04.htmlに追加して表示してみましょう。下図のように、ヘッダーが一行追加されていると思います。
図3. 複数行のヘッダー
先ほどのコードを使って、今度はヘッダーにリンクをつけてみましょう。ヘッダーにはHTMLを使用することが可能です。
lesson04.html
init : function() { ・・・省略・・・ this.mygrid.attachHeader("(Num),(Str),<a href='http://dhtmlx.com'>(Str)</a>"); },
図4. リンクのあるヘッダー
ヘッダーの各列は、結合することも可能です。HTMLのTDタグで使用されるcolspan属性と同じです。
lesson04.html
init : function() { ・・・省略・・・ this.mygrid.attachHeader("Multi-line&Colspan,#cspan,#cspan"); },
図5. 列の結合
他に、ヘッダーの各列に個別のスタイルを適用したり、行を結合したりすることも可能です。今回は、紙面の都合上、説明を割愛させていただきます。
イベント定義
データグリッドには、グリッド操作に応じた独自のイベントを定義することが可能です。 この機能を追加するには、「attachEvent」を使用してグリッドイベントに対して関数を定義します。詳細は、下記のコードをご覧ください。
init : function() { this.mygrid = new dhtmlXGridObject("mygrid"); this.mygrid.setImagePath("codebase/imgs/"); this.mygrid.setHeader("ID,Name,Description"); this.mygrid.setColTypes("ro,ro,ed"); this.mygrid.setInitWidths("*,150,350"); this.mygrid.setColAlign("right,left,left"); this.mygrid.setColSorting("int,str,str"); this.mygrid.setSkin("light"); this.mygrid.init(); this.mygrid.attachHeader("(Num),(Str),(Str)"); this.mygrid.attachEvent("onRowSelect", function(id) { alert("Selected row id: " + id); }); },
赤字コードの部分をlesson04.htmlに追加して表示し、行を選択してみてください。下図のように、メッセージが表示されると思います。
図6. イベント定義
上記のコードでは、行を選択した時の独自イベントを定義しました。ここでは全部を解説できませんが、他にもいろいろなイベントを定義することが可能です。
おわりに
連載の第四回目はいかがでしたか?紙面の都合上、あまり多くを解説することはできませんでしたが、データグリッドに対して機能を追加することが簡単であることは、お分かりいただけたのではないかと思います。さらに追加できる機能を知りたい方は、以下のページを参照することをお勧めします。
- http://dhtmlx.com/docs/products/dhtmlxGrid/samples/index.html
データグリッドのサンプルです(中には有償版でないと追加できない機能があります) - http://docs.dhtmlx.com/doku.php?id=dhtmlxgrid:toc
データグリッドのドキュメントです
次回は、サーバー側と連携させてみたいと思います。Java言語が多少出てくるため、若干、難度があがるかもしれませんが、極力分かりやすく解説しようと思います。お楽しみに!
第4回 おしまい
※.記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。