【问题标题】:AdvancedDataGrid total sum of branch nodesAdvancedDataGrid 分支节点总数
【发布时间】:2012-01-09 13:59:11
【问题描述】:

简介: 我有一个 AdvancedDataGrid 显示下图所示的分层数据:

分支节点“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,因此应该标记为红色

提前致谢!

【问题讨论】:

    标签: actionscript-3 apache-flex advanceddatagrid


    【解决方案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(同样,不要尝试使用其他集合——除非你已经准备好面对很多挫折)。创建将此数组集合用作源的分层数据。

    颜色 - 这就是您使用项目渲染器的目的,只需查找有关使用项目渲染器的任何教程,这一定是非常基本的。

    【讨论】:

    • 感谢您的帮助和良好的回答!我找到了解决问题的方法(有关更多信息,请阅读我的答案)。解决方案比我预期的要简单一些:p
    【解决方案2】:

    如果其他人有同样的问题:

    最初的问题是将所有内容相加两次,是对两个分组字段(GropingField2 tavle分类)

    主要问题的解决方案:是为根节点创建一个新的汇总字段数组(在我的初始 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;  
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多