apache-flex 拖放值时更新总值数据网格- Adobe Flex

dsf9zpds  于 2022-11-01  发布在  Apache
关注(0)|答案(1)|浏览(182)

我有两个数据网格,每个都有总计标签。此标签合计每个数据网格的所有值。当我将值从一个数据网格拖放到另一个数据网格时,两个标签总计必须根据每个数据网格的值进行更新。
然而,一笔款子却迟迟没有着落。
代码:

  1. <?xml version="1.0"?>
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  3. xmlns:s="library://ns.adobe.com/flex/spark"
  4. xmlns:mx="library://ns.adobe.com/flex/mx"
  5. width="650"
  6. creationComplete="initApp();">
  7. <fx:Script>
  8. <![CDATA[
  9. import mx.collections.ArrayCollection;
  10. import mx.events.DataGridEvent;
  11. import mx.events.DragEvent;
  12. private function initApp():void {
  13. dgA.dataProvider = new ArrayCollection([
  14. {Expense:'Electricity', Value:300, minNo: 100, maxNo: 500},
  15. {Expense:'Phone', Value:200, minNo: 50, maxNo: 300},
  16. {Expense:'Contract A', Value:5000, minNo: 4000, maxNo: 6000},
  17. {Expense:'Contract B', Value:6000, minNo: 4500, maxNo: 8500},
  18. {Expense:'Contract C', Value:3000, minNo: 2500, maxNo: 3500}
  19. ]);
  20. dgB.dataProvider = new ArrayCollection([]);
  21. sumA();
  22. }
  23. private function disableEditing(event:DataGridEvent):void {
  24. if(event.columnIndex==0)
  25. {
  26. event.preventDefault();
  27. }
  28. }
  29. public function sumA():void {
  30. var sum:Number = 0;
  31. for (var k:String in dgA.dataProvider){
  32. sum += dgA.dataProvider[k]['Value'];
  33. }
  34. totalA.text = sum.toString();
  35. }
  36. public function sumB():void {
  37. var sum:Number = 0;
  38. for (var k:String in dgB.dataProvider){
  39. sum += dgB.dataProvider[k]['Value'];
  40. }
  41. totalB.text = sum.toString();
  42. }
  43. public function dragDropHandler(event:DragEvent):void {
  44. sumA();
  45. sumB();
  46. }
  47. ]]>
  48. </fx:Script>
  49. <s:HGroup>
  50. <s:VGroup>
  51. <s:Label text="Cost 1"/>
  52. <mx:DataGrid id="dgA"
  53. allowMultipleSelection="true"
  54. dragEnabled="true"
  55. dropEnabled="true"
  56. dragMoveEnabled="true"
  57. dragDrop="dragDropHandler(event)">
  58. <mx:columns>
  59. <mx:DataGridColumn dataField="Expense"/>
  60. <mx:DataGridColumn dataField="Value"/>
  61. </mx:columns>
  62. </mx:DataGrid>
  63. <s:Form>
  64. <s:FormItem label="Total">
  65. <s:Label id="totalA"/>
  66. </s:FormItem>
  67. </s:Form>
  68. </s:VGroup>
  69. <s:VGroup>
  70. <s:Label text="Cost 2"/>
  71. <mx:DataGrid id="dgB"
  72. allowMultipleSelection="true"
  73. dragEnabled="true"
  74. dropEnabled="true"
  75. dragMoveEnabled="true"
  76. editable="true"
  77. itemEditBeginning="disableEditing(event);"
  78. dragDrop="dragDropHandler(event)">
  79. <mx:columns>
  80. <mx:DataGridColumn dataField="Expense"/>
  81. <mx:DataGridColumn dataField="Value" editorDataField="value">
  82. <mx:itemEditor>
  83. <fx:Component>
  84. <mx:NumericStepper stepSize="1" width="35" height="20">
  85. <fx:Script>
  86. <![CDATA[
  87. override public function set data(value:Object):void
  88. {
  89. super.data = value;
  90. if (value && value.hasOwnProperty("minNo")) {
  91. minimum = value.minNo;
  92. }
  93. if (value && value.hasOwnProperty("maxNo")) {
  94. maximum = value.maxNo;
  95. }
  96. }
  97. ]]>
  98. </fx:Script>
  99. </mx:NumericStepper>
  100. </fx:Component>
  101. </mx:itemEditor>
  102. </mx:DataGridColumn>
  103. </mx:columns>
  104. </mx:DataGrid>
  105. <s:Form>
  106. <s:FormItem label="Total">
  107. <s:Label id="totalB"/>
  108. </s:FormItem>
  109. </s:Form>
  110. </s:VGroup>
  111. </s:HGroup>
  112. </s:Application>
7nbnzgx9

7nbnzgx91#

使用callLater()方法从dragDropHandler调用sum方法,如下所示

  1. public function dragDropHandler(event:DragEvent):void {
  2. callLater(doTotal);
  3. }
  4. public function doTotal():void{
  5. sumA();
  6. sumB();
  7. }

我测试了它,它对我来说工作正常。

相关问题