简介: 我有一个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,因此应标记为红色
提前致谢!
答案 0 :(得分:1)
这是一个通用的答案,没有代码示例,但我几天前必须做同样的事情,所以我的记忆仍然很新鲜:)这就是我做的:
创建了一个A类来表示项呈示器数据,从Proxy(我在运行时定义了字段名)扩展它,并让它包含一组值作为它的数据成员。通过flash_proxy::getPropery(fieldName)
访问后,它会在包含值的数据成员中找到相应的值并将其返回。 特别提示:实施IUID
,只需这样做,就可以为您节省几天的挫折。
B中的扩展A,添加了一个包含A的ArrayCollection的children
属性(不要试图尝试其他集合类型,除非你想找到自己检查大量的框架代码,相信我,它很丑陋,不可能被认为是有趣的)。让B覆盖flash_proxy::getPropery
- 取决于您的编译器,如果不可能,这可能是,或者可能是不可能的 - 从A.flash_proxy::getPropery()
中调用一些可以在B中覆盖的函数。让这个函数查询A的每个实例,这是B的孩子,在构建项目渲染器时会像DataGrid本身一样询问同样的事情 - 这样你就可以得到总数。
创建数据提供者时。创建一个B的ArrayCollection(再次,不要试图尝试其他集合 - 除非你准备好了很多挫折)。创建使用此数组集合作为源的分层数据。
颜色 - 这是您使用项目渲染器的内容,只需查看有关使用项目渲染器的任何教程,这必须非常基础。
答案 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;
}