ドゥアイネットのプログラマー、湯川が開発日記を綴ります。

CALENDAR
S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
<< November 2019 >>
ARCHIVES
CATEGORIES
<< DataGridのヘッダーの色 | main | 納品時のバグ >>
commitProperties
     commitPropertiesは全てのプロパティが確定されたときに呼ばれるメソッドです。
    
    今回DataGridで、ヘッダーのタイプを指定後に
    DataGridColumnのheaderRendererを指定する必要がありました。
    
    以下の二つのセッターをMXMLでセットしていたのですが、
    必ずしも「headerType」が先に実行されるわけではありませんでした。
    
    1.headerType
    /**
     * ヘッダーのタイプを指定します
     * @param p_type
     *
     */    
    public function set headerType(p_type:String):void
    {

      _headerType = p_type;

      if (_headerType == "flat"){
        this.setStyle("paddingTop","0");
        this.setStyle("paddingBottom","0");
        _header = new ClassFactory(MyDataGridHeaderMiniRenderer);
      }
      else{
        this.setStyle("headerBackgroundSkin",headerskin);
        _header = new ClassFactory(MyDataGridHeaderRenderer);
      }
      
    }
    
    2.columns
    /**
     * カラムをセットします
     * @param p_data
     *
     */
    override public function set columns(p_data:Array):void
    {

      for (var i:int=0; i<p_data.length; i++) {
        //setter headerTypeが先に実行されていないと、
        //_headerがnullになって表示がおかしくなってしまいます。
        DataGridColumn(p_data[i]).headerRenderer= _header;          
      }

      super.columns = p_data;

    }

こんな感じでヘッダー部分にスクロールバーがでてしまいます。

画像

    調べたところ「commitProperties」がありました。
    「columns」で実行していた処理を、「commitProperties」に移しました。
    これで、_headerTypeが確定してから「headerRenderer」のセットが行われるようになりました。


    /**
     * カラムをセットします
     * @param p_data
     *
     */
    override public function set columns(p_data:Array):void
    {
      //ここではセットしない
      //for (var i:int=0; i<p_data.length; i++) {
      //  DataGridColumn(p_data[i]).headerRenderer= _header;          
      //}

      super.columns = p_data;

    }

    /**
     * commitProperties(ヘッダーの制御のために追加)
     *
     */
    override protected function commitProperties():void
    {
      super.commitProperties();

      for (var i:int=0; i<this.columns.length; i++) {
        DataGridColumn(this.columns[i]).headerRenderer= _header;          
      }

    }

    きちんと表示されるようになりました。
 画像

| Flex | 18:59 | comments(0) | - |
コメント
コメントする