第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回 おしまい
※.記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。