Home   Single Page

ライブデータ

リストボックスのように、グリッドはライブデータをサポートします。ライブデータを使うと、開発者はビューからデータを分けることができます。つまり、開発者はグリッドを直接処理することよりむしろ、org.zkoss.zul.ListModelインターフェースを実装し、データを提供するだけが必要になります。その利点は二つあります。

ライブデータを使用するには三つのステップがあります。

  1. ListModelの形のデータを準備します。ZKではオブジェクト群を表すためのorg.zkoss.zul.SimpleListModelと呼ばれる具体的な実装があります。

  2. データ列をグリッドにレンダリングするためにorg.zkoss.zul.RowRendererインターフェースを実装します。

  1. データをmodelプロパティの中に指定します。必要な場合はrowRendererプロパティ中にレンダラーを指定します。

以下の例中では、strsetと呼ばれるリストモデルを準備し、modelプロパティを使って、グリッドに指定します。そうしてグリッドは残りの作業を行ってくれます。

<window title="Live Grid" border="normal">
    <zscript>    
        String[] data = new String[30];        
        for(int j=0; j &lt; data.length; ++j) {        
            data[j] = "option "+j;            
        }        
        ListModel strset = new SimpleListModel(data);        
    </zscript>    
    <grid width="100px" height="100px" model="${strset}">    
        <columns>        
            <column label="options"/>            
        </columns>        
    </grid>    
</window>

ライブデータを使用したソート

ライブデータが使用されているグリッドを並び替えられるようにするなら、org.zkoss.zul.ListModelのほかに、org.zkoss.zul.ListModelExtのインターフェースを実装しなければなりません。

class MyListModel implements ListModel, ListModelExt {
    public void sort(Comparator cmpr, boolean ascending) {    
        //do the real sorting        
        //notify the grid (or listbox) that data is changed by use of ListDataEvent        
    }    
}

ユーザーがグリッドにソートを要求するとき、グリッドはデータソートのためのListModelExtのsortメソッドを呼び出します。つまり、ソーティングはグリッドよりもリストモデルによってソートが行われます。

ソートの後に、リストモデルは(addListDataListener メソッドにより)グリッドに指定されたorg.zkoss.zul.event.ListDataListenerのonChangeメソッドを呼び出し、グリッドに通知します。ほとんどの場合、すべてのデータは変更されます。そうしてリストモデルは以下のイベントを送信します。

new ListDataEvent(this, ListDataEvent.CONTENTS_CHANGED, -1, -1)