• Flex实现DataGrid的序号列


    要在Flex的DataGrid里添加序号列,大体上有两种方法:

    1.设置DataGridColumn的labelFunction。
    其大致的思路是,获取到当前DataGrid的dataProvider及当前行的data,调用getItemIndex方法获取到当前的行的序号。
    具体可参考 http://wmcai.blog.163.com/blog/static/480242008111115724283/。这种方法比较直观,也很容易想到。
    但重用性很差,其生成序号的labeldFunction无法重用。 
    2.设置DataGridColumn的ItemRenderer。
    即自定义一个itemRenderer来处理序列号的生成。这种方法重用性很高。至于如何生成序号,这里需要些小技巧。

    SequenceItemRenderer.as
     view plaincopy to clipboardprint?01.package com.carnation.component.common   02.{   03.    import mx.collections.IList;   04.    import mx.controls.Label;   05.    import mx.controls.listClasses.BaseListData;   06.    import mx.controls.listClasses.ListBase;   07.    public class SequenceItemRenderer extends Label   08.    {   09.        public function SequenceItemRenderer()   10.        {   11.            super();   12.        }   13.           14.//      另一种方法获取dataProvider并调用getItemIndex方法   15.//      override public function set data(value:Object):void{   16.//          super.data = value;   17.//          text = (((listData.owner as ListBase).dataProvider as IList)   18.//              .getItemIndex(data) + 1).toString();   19.//      }   20.        override public function set listData(value:BaseListData):void{   21.            super.listData = value;   22.            text = ((value.owner as ListBase).itemRendererToIndex(this) + 1).toString();   23.        }   24.    }   25.}  package com.carnation.component.common
    {
     import mx.collections.IList;
     import mx.controls.Label;
     import mx.controls.listClasses.BaseListData;
     import mx.controls.listClasses.ListBase;
     public class SequenceItemRenderer extends Label
     {
      public function SequenceItemRenderer()
      {
       super();
      }
      
    //  另一种方法获取dataProvider并调用getItemIndex方法
    //  override public function set data(value:Object):void{
    //   super.data = value;
    //   text = (((listData.owner as ListBase).dataProvider as IList)
    //    .getItemIndex(data) + 1).toString();
    //  }
      override public function set listData(value:BaseListData):void{
       super.listData = value;
       text = ((value.owner as ListBase).itemRendererToIndex(this) + 1).toString();
      }
     }
    }


    Test.mxml

    view plaincopy to clipboardprint?
    01.<?xml version="1.0" encoding="utf-8"?> 
    02.<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()"> 
    03.    <mx:Script> 
    04.        <!--[CDATA[  
    05.            import com.carnation.component.common.SequenceItemRenderer;  
    06.              
    07.            private var indexRenderer:Class = SequenceItemRenderer;  
    08.              
    09.            private function init():void{  
    10.                var array:Array = [];  
    11.                for(var i:int = 1; i <= 10; i++){  
    12.                    array.push({name:"name"+i.toString()});  
    13.                }  
    14.                grid.dataProvider = array;  
    15.            }  
    16.        ]]--> 
    17.    </mx:Script> 
    18.    <mx:DataGrid id="grid"> 
    19.        <mx:columns> 
    20.            <mx:DataGridColumn headerText="no" itemRenderer="{new ClassFactory(indexRenderer)}"/> 
    21.            <mx:DataGridColumn headerText="name" dataField="name"/> 
    22.        </mx:columns> 
    23.    </mx:DataGrid> 
    24.</mx:Application> 
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()">
     <mx:Script>
      <!--[CDATA[
       import com.carnation.component.common.SequenceItemRenderer;
       
       private var indexRenderer:Class = SequenceItemRenderer;
       
       private function init():void{
        var array:Array = [];
        for(var i:int = 1; i <= 10; i++){
         array.push({name:"name"+i.toString()});
        }
        grid.dataProvider = array;
       }
      ]]-->
     </mx:Script>
     <mx:DataGrid id="grid">
      <mx:columns>
       <mx:DataGridColumn headerText="no" itemRenderer="{new ClassFactory(indexRenderer)}"/>
       <mx:DataGridColumn headerText="name" dataField="name"/>
      </mx:columns>
     </mx:DataGrid>
    </mx:Application>
     


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/shirc/archive/2010/01/22/5222363.aspx

  • 相关阅读:
    build、host和target选项
    第一篇博客
    C++中的new和delete
    新分类:C++复习笔记
    泛读英文小说推荐
    借助查询分析器对遗留项目进行分析
    程序员等级(非本人观点)
    线程并发时的四种数据同步方法
    单元测试之什么是优秀的单元测试
    多线程之进度条
  • 原文地址:https://www.cnblogs.com/bmate/p/1894332.html
Copyright © 2020-2023  润新知