表形式表示

Q 13
FlexView タイトル行をクリックしてデータをソートさせる

A 13
[解決方法]
タイトル上のクリックによる処理は、FlexItemオブジェクトのTitleLClickedイベントにて
実装が可能です。
(タイトル上のマウス右クリックではTitleRClickedイベント、マウス左ダブルクリックでは
TitleDClickedイベントが発生します。)

FlexViewはSpreadと異なり、タイトル上のクリックによるイベントの発生元が
FlexItemオブジェクト(FlexLabelやFlexButtonオブジェクトなど)となり、
クリックされたオブジェクト(列)が特定されているため、OnTitleLClickedイベントハンドラの
引数として渡されるEventオブジェクトには列番号は含まれませんのでご留意ください。

FlexViewクラスには2種類のソート用メソッドが用意されています。

 
Sortメソッド 行のソート
IndentSortメソッド FlexIndentLabel行のソート
 
FlexIndentLabelオブジェクトの列をインデントの接続ができるようにソートしたい場合にはIndentSortメソッドをご利用ください。

また、ソート処理に関連した機能として下記の機能がご利用頂けます。

・  FlexViewに表示されていない項目でソートする。
FlexDataオブジェクトのDataプロパティを利用して実現可能です。
例えば、FlexLabelオブジェクトのValueプロパティには漢字で氏名を設定し、
Dataプロパティには仮名で氏名を設定。氏名でソートする際に漢字ではなくフリガナで
ソートさせる、といった実装が可能です。
・  タイトルにソート(昇順・降順)のマークを表示する
FlexItemオブジェクトのTitleMarkerプロパティを利用して、列タイトルに△▽マークを
表示することが可能です。


[サンプルコード]

Form Form1 {
    X = 0;
    Y = 0;
    Width = 400;
    Height = 300;
    FlexView FlexView1 {
        X = 15;
        Y = 15;
        Width = 200;
        Height = 90;
        FlexRecord FlexRecord1 {
            FlexLabel FlexLabel1 {
                TitleHorzAlign = $CENTER;
                TitleBgColor = $STD;
                TitleFgColor = $STD;
                Title = "氏名";
                HorizontalAlign = $LEFT;
                Width = 200;

                Function OnTitleLClicked( e ) {
                    if( e.From.TitleMarker == $UPMARKER ){
                        ^.^.Sort( 0, "d" );
                        e.From.TitleMarker = $DOWNMARKER;
                    }else{
                        ^.^.Sort( 0, "a" );
                        e.From.TitleMarker = $UPMARKER;
                    }
                    /* フリガナでソートする場合
                    if( e.From.TitleMarker == $UPMARKER ){
                        ^.^.Sort( 0, "d", "data" );
                        e.From.TitleMarker = $DOWNMARKER;
                    }else{
                        ^.^.Sort( 0, "a", "data" );
                        e.From.TitleMarker = $UPMARKER;
                    }
                    */
                }
            }
        }
    }
    if ( !$DESIGNTIME ) {
        FlexView1 << new CSVDocument << CSV( FlexLabel1.value,
                                             FlexLabel1.data ){
            "青木 一","アオキ ハジメ"
            "青木 二郎","アオキ ジロウ"
            "青木 三郎","アオキ サブロウ"
        };

        /* ソート */
        FlexView1.Sort( 0, "a" );
        /* △▽マークの設定 */
        FlexView1.FlexRecord1.FlexLabel1.TitleMarker = $UPMARKER;
    }
}
管理番号:BMP_N012
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser Mobile・Biz/Designer Mobile TIPS集 トップへ