AdvancedDataGrid分支节点的总和

时间:2012-01-09 13:59:12

标签: actionscript-3 flex advanceddatagrid

简介: 我有一个AdvancedDataGrid显示分层数据,如下图所示: enter image description here

分支节点“Prosjekt”和“Tiltak”显示下面叶子节点的总和。

问题:我希望根节点“Tavle”显示下面的分支节点的总和。当我尝试通过添加相同的SummaryRow来完成此操作时,根节点的总和未正确计算(每个节点的总和计算两次)。

dg_Teknikktavles = new AutoSizingAdvancedDataGrid();
            dg_Teknikktavles.sortExpertMode="true";
            dg_Teknikktavles.headerHeight = 50;
            dg_Teknikktavles.variableRowHeight = true;

            dg_Teknikktavles.addEventListener(ListEvent.ITEM_CLICK,dg_TeknikktavlesItemClicked);
            dg_Teknikktavles.editable="false";
            dg_Teknikktavles.percentWidth=100;
            dg_Teknikktavles.minColumnWidth =0.8;
            dg_Teknikktavles.height = 1000;
            var sumFieldArray:Array = new Array(context.brukerList.length);

            for(var i:int = 0; i < context.brukerList.length; i++)
            {
            var sumField:SummaryField2 = new SummaryField2();
            sumField.dataField = Ressurstavle.ressursKey + i;
            sumField.summaryOperation = "SUM";
            sumFieldArray[i] = sumField;
            }

            var summaryRow:SummaryRow = new SummaryRow();
            summaryRow.summaryPlacement = "group";
            summaryRow.fields = sumFieldArray;

            var summaryRow2:SummaryRow = new SummaryRow();
            summaryRow2.summaryPlacement = "group";
            summaryRow2.fields = sumFieldArray;

            var groupField1:GroupingField = new GroupingField();
            groupField1.name = "tavle";
            //groupField1.summaries = [summaryRow2];

            var groupField2:GroupingField = new GroupingField();
            groupField2.name = "kategori";
            groupField2.summaries = [summaryRow];
            var group:Grouping = new Grouping();
            group.fields = [groupField1, groupField2];
            var groupCol:GroupingCollection2 = new GroupingCollection2();
            groupCol.source = ressursTavle;
            groupCol.grouping = group;
            groupCol.refresh();

主要问题:如何让我的AdvancedDataGrid(dg_Teknikktavles)根节点“Tavle”正确显示下面两个分支节点的总和?

方面问题:如何为超过5的根节点摘要行的数字添加红色?例如,显示8的列将在根节点的摘要行中超过5,因此应标记为红色

提前致谢!

2 个答案:

答案 0 :(得分:1)

这是一个通用的答案,没有代码示例,但我几天前必须做同样的事情,所以我的记忆仍然很新鲜:)这就是我做的:

  1. 创建了一个A类来表示项呈示器数据,从Proxy(我在运行时定义了字段名)扩展它,并让它包含一组值作为它的数据成员。通过flash_proxy::getPropery(fieldName)访问后,它会在包含值的数据成员中找到相应的值并将其返回。 特别提示:实施IUID,只需这样做,就可以为您节省几天的挫折

  2. B中的扩展A,添加了一个包含A的ArrayCollection的children属性(不要试图尝试其他集合类型,除非你想找到自己检查大量的框架代码,相信我,它很丑陋,不可能被认为是有趣的)。让B覆盖flash_proxy::getPropery - 取决于您的编译器,如果不可能,这可能是,或者可能是不可能的 - 从A.flash_proxy::getPropery()中调用一些可以在B中覆盖的函数。让这个函数查询A的每个实例,这是B的孩子,在构建项目渲染器时会像DataGrid本身一样询问同样的事情 - 这样你就可以得到总数。

  3. 创建数据提供者时。创建一个B的ArrayCollection(再次,不要试图尝试其他集合 - 除非你准备好了很多挫折)。创建使用此数组集合作为源的分层数据。

  4. 颜色 - 这是您使用项目渲染器的内容,只需查看有关使用项目渲染器的任何教程,这必须非常基础。

答案 1 :(得分:0)

如果其他人遇到同样的问题:

对于两个分组字段(GropingField2 tavle 和GropingField2 驾驶员学校

主要问题的解决方案:是为根节点创建一个新的摘要字段数组(在我的初始for循环中):

    //Summary fields for root node
    var sumFieldRoot:SummaryField2 = new SummaryField2();
    sumFieldRoot.dataField = Ressurstavle.ressursKey + i;
    sumFieldRoot.summaryOperation = "SUM";
    sumFieldArrayRoot[i] = sumFieldRoot;

回答旁边问题: 这非常简单,就像wvxyw所指出的那样简单。以下解决方案的代码:

        private function summary_styleFunction(data:Object, col:AdvancedDataGridColumn):Object
        {
            var output:Object;
            var field:String = col.dataField; 
            if ( data.children != null )  
            {  
                if(data[field] >5){
                    output = {color:0xFF0000, fontWeight:"bold"}
                }
                else {
                    output = {color:0x006633, fontWeight:"bold"}
                }
                //output = {color:0x081EA6, fontWeight:"bold", fontSize:14}

            }  


            return output;  
        }