在一个项目当中很多地方用到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
Flex 2 扩展DataGrid实现行与列的自动合计
最新推荐文章于 2019-07-23 12:17:15 发布
本文介绍了一种扩展Flex 2 DataGrid的方法,以实现自动计算行与列合计的功能。通过覆盖dataProvider和columns的set方法,并加入计算总和的逻辑,实现了在组件中动态展示合计行和合计列。代码示例展示了如何扩展DataGrid以及如何在项目中使用此组件。
摘要由CSDN通过智能技术生成