第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. レコード並び替え前
図1. レコード並び替え前

図2. Nameでレコードを並び替え
図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. 複数行のヘッダー
図3. 複数行のヘッダー

先ほどのコードを使って、今度はヘッダーにリンクをつけてみましょう。ヘッダーにはHTMLを使用することが可能です。

lesson04.html

    init : function() {
      ・・・省略・・・
      this.mygrid.attachHeader("(Num),(Str),<a href='http://dhtmlx.com'>(Str)</a>");
    },
                

図4. リンクのあるヘッダー
図4. リンクのあるヘッダー

ヘッダーの各列は、結合することも可能です。HTMLのTDタグで使用されるcolspan属性と同じです。

lesson04.html

    init : function() {
      ・・・省略・・・
      this.mygrid.attachHeader("Multi-line&Colspan,#cspan,#cspan");
    },
                

図5. 列の結合
図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. イベント定義
図6. イベント定義

上記のコードでは、行を選択した時の独自イベントを定義しました。ここでは全部を解説できませんが、他にもいろいろなイベントを定義することが可能です。

おわりに

連載の第四回目はいかがでしたか?紙面の都合上、あまり多くを解説することはできませんでしたが、データグリッドに対して機能を追加することが簡単であることは、お分かりいただけたのではないかと思います。さらに追加できる機能を知りたい方は、以下のページを参照することをお勧めします。

次回は、サーバー側と連携させてみたいと思います。Java言語が多少出てくるため、若干、難度があがるかもしれませんが、極力分かりやすく解説しようと思います。お楽しみに!


第4回 おしまい



※.記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。

金融システムやさまざまな業務システム開発、ECサイトなどの各種Webサイト構築・開発、IC(RFID)を活用したシステム、技術者向けOJTやICタイムリコーダー等、システム開発に関わることならオープントーンにお任せください。