[RadPHP]QListViewのセルのフォントを条件によって変える

RadPHP XEでQListViewのセルのフォントを条件によって変える方法を紹介します。

QListViewのセルのフォントを条件によって変えるには、qx.ui.table.cellrenderer.Conditionalクラスを使用します。

■Conditionalクラス

//コンストラクタ
Conditional(String align, String color, String style, String weight)

引数は、条件に該当しない時のフォントの設定に適用されます。

■条件の指定方法

条件を文字列で指定する時は、addRegex()メソッドを使用します。

//正規表現で条件指定
addRegex(String regex, String align, String color, String style, String weight, String target)

条件を数値で指定する時は、addNumericCondition()メソッドを使用します。

//数値で条件指定
addNumericCondition(String condition, Integer value1, String align, String color, String style, String weight, String target)

条件には次の文字を使用できます。

'==', '!=', '>', '<', '>=', '<='

条件を範囲で指定する時は、addBetweenCondition()メソッドを使用します。

addBetweenCondition(String condition, Integer value1, Integer value2, String align, String color, String style, String weight, String target)

作成したConditionalはColumnModelにsetDataCellRendererメソッドで登録します。

setDataCellRenderer(Integer col, ICellRenderer renderer)

最後にTableのupdateContent()メソッドで表示を更新します。

//表示を更新
QListView1.updateContent();

次のコードは、2列目のセルの値に「ESD」の文字があれば、フォントを中寄せ・赤字にします。

var newRenderer2 = new qx.ui.table.cellrenderer.Conditional('', '', '', '');
newRenderer2.addRegex('ESD', 'center', 'red', null, null);
QListView1.getTableColumnModel().setDataCellRenderer(1, newRenderer2); //列番号は0から
QListView1.updateContent();

次のコードは、3列目のセルの値が「80000」より大きければ、中寄せ・赤字・太字にします。

var newRenderer3 = new qx.ui.table.cellrenderer.Conditional('right', '#000000', '', '');
newRenderer3.addNumericCondition('>', 80000, 'center', 'red', null, 'bold');
QListView1.getTableColumnModel().setDataCellRenderer(2, newRenderer3);
QListView1.updateContent();

■サンプルプログラム

以下、サンプルコードです。

フォームにQListViewを配置します。

フォームのEncodingを「Unicode(UTF-8)」に変更します。

QListView1のColumnsプロパティを編集し、列名を設定します。

製品名
配布形態
金額

フォームのJavaScriptのOnLoadイベントに次のコードを記述します。

function Unit1JSLoad($sender, $params)
{
    ?>
    //begin js
    //行データの登録
    var rowData = [['RAD Studio XE Professional (ライセンス+メディア)', 'DVD', 168000],
                   ['RAD Studio XE Professional ESD バージョンアップ (ライセンスのみ)', 'ESD(ライセンスのみ)', 84000],
                   ['Delphi XE Professional (ライセンス+メディア)', 'DVD', 98000],
                   ['Delphi XE Professional ESD バージョンアップ (ライセンスのみ)', 'ESD(ライセンスのみ)', 52000],
                   ['Delphi XE Starter ESD(ライセンスのみ) アップグレード版', 'ESD(ライセンスのみ', 14000],
                   ['C++Builder XE Professional (ライセンス+メディア)', 'DVD', 98000],
                   ['C++Builder XE Professional ESD バージョンアップ (ライセンスのみ)', 'ESD(ライセンスのみ)', 52000],
                   ['C++Builder XE Starter ESD(ライセンスのみ) アップグレード版', 'ESD(ライセンスのみ)', 14000],
                   ['RadPHP XE (ライセンス+メディア)', 'DVD', 36000],
                   ['RadPHP XE ESD (ライセンスのみ) バージョンアップ', 'ESD(ライセンスのみ)', 20000]];
    QListView1.getTableModel().setData(rowData);

    //2列目の表示条件を設定
    var newRenderer2 = new qx.ui.table.cellrenderer.Conditional('', '', '', '');
    newRenderer2.addRegex('ESD', 'center', 'red', null, null);
    QListView1.getTableColumnModel().setDataCellRenderer(1, newRenderer2); //列番号は0から

    //3列目の表示条件を設定
    var newRenderer3 = new qx.ui.table.cellrenderer.Conditional('right', '#000000', '', '');
    newRenderer3.addNumericCondition('>', 50000, null, 'blue', null, null);
    newRenderer3.addNumericCondition('>', 80000, 'center', 'red', null, 'bold');
    QListView1.getTableColumnModel().setDataCellRenderer(2, newRenderer3);

    //表示を更新。更新しないと表示条件が適用されない。
    QListView1.updateContent();

    //列幅の調整
    var tcm = QListView1.getTableColumnModel();
    tcm.setColumnWidth(0, 300);
    tcm.setColumnWidth(1, 140);
    tcm.setColumnWidth(2, 100);
    //end
    <?php
}

実行すると、次のように表示されます。

※RPCLはRevision 291を使用しました。
 参考:RPCL(RadPHP Component Library) の最新版について

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください