Flex 2 扩展DataGrid实现行与列的自动合计

本文介绍了一种扩展Flex 2 DataGrid的方法,以实现自动计算行与列合计的功能。通过覆盖dataProvider和columns的set方法,并加入计算总和的逻辑,实现了在组件中动态展示合计行和合计列。代码示例展示了如何扩展DataGrid以及如何在项目中使用此组件。
摘要由CSDN通过智能技术生成

      在一个项目当中很多地方用到DataGrid,而且需要显示合计行与合计列,所以想办法扩展 了一下Flex 2 的DataGrid,覆盖了dataProvider 的set方法与columns的set方法,另外加入了计算合计数的方法,当然现在还没有写的那么细,不过与大家共享一下,希望有兴趣的继续改进这个组件,下面附上代码,未经同意,禁止转载:

<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" columnStretch="onColumnStrech(event)" headerShift="onHeaderShift(event)" sortableColumns="false">
    <mx:Script>
        <![CDATA[
            import mx.events.IndexChangedEvent;
            import mx.events.DataGridEvent;
            import mx.controls.dataGridClasses.DataGridColumn;
            import mx.core.Application;
            import mx.controls.TextInput;
            import mx.core.UIComponent;
            import mx.containers.HBox;
            import mx.utils.ArrayUtil;
            import mx.utils.ObjectUtil;
            import mx.collections.ArrayCollection;
            import mx.validators.NumberValidator;
            import mx.events.DataGridEventReason;
            
            private var totaldg : DataGrid ;
            private var _showRowTotal : Boolean = false;
            private var _showColumnTotal : Boolean = false;
            public var canShiftHeaders : Boolean = false;
            public function set showRowTotal(value:Boolean):void
            {
                this._showRowTotal = value;
            }
            public function get showRowTotal():Boolean
            {
                return this._showRowTotal;
            }
            public function set showColumnTotal(value:Boolean):void
            {
                this._showColumnTotal = value;
            }
            public function get showColumnTotal():Boolean
            {
                return this._showColumnTotal;
            }
            override public function set columns(value:Array):void
            {
                if(_showColumnTotal && value is Array)
                {
                    if(value)
                    {
                        var totalcol : DataGridColumn = new DataGridColumn();
                        totalcol.dataField = "vtotal";
                        totalcol.headerText = "合计";
                        totalcol.setStyle("textAlign","right");
                        totalcol.width = 100;
                        (value as Array).push(totalcol);
                    }
                }
                getTotalDG().columns = value;
                super.columns = value;
            }
     
       /**
         *  @private
         */
        override public function set dataProvider(value:Object):void
        {
            var objhtotal : Object = new Object();
            if(value is Array)
            {
                var acc : ArrayCollection = new ArrayCollection(value as Array);
                var objvtotal : Object = new Object();
                var columncount :int = 0;
                var alltotal : Number = 0;
                for each(var row : Object in acc)
                {
                    var n : Number = 0;
                    var colnum : int = 0;
                    for(var colvalue:Object in row)
                    {
                        
                        if(!isNaN(Number(row[colval

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值