在数据网格中编辑时保持当前值 - Adob​​e Flex

Keep current value when edit in datagrid - Adobe Flex

我有两个数据网格,可以将任何项目从数据网格 A 拖放到数据网格 B 中。在数据网格 B 中,我可以编辑值,这些值有最小值和最大值限制。这些值具有货币格式。但是,我遇到了一个问题:当我编辑 datagrib B 中删除的项目中的值时,该值会自动更改为最小值。

正确的是编辑时保持当前值。

有什么想法吗?

代码:

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" 
               width="650"
               creationComplete="initApp();">

<fx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        import mx.events.DataGridEvent;

        private function initApp():void {
            dgA.dataProvider = new ArrayCollection([
                {Expense:'Electricity', Value:300, minNo: 100, maxNo: 500},
                {Expense:'Phone', Value:200, minNo: 50, maxNo: 300},
                {Expense:'Contract A', Value:5000, minNo: 4000, maxNo: 6000},
                {Expense:'Contract B', Value:6000, minNo: 4500, maxNo: 8500},
                {Expense:'Contract C', Value:3000, minNo: 2500, maxNo: 3500}
            ]);

            dgB.dataProvider = new ArrayCollection([]);
        }

        private function disableEditing(event:DataGridEvent):void {
            if(event.columnIndex==0)
            {
                event.preventDefault(); 
            }
        }

        protected function LabelFormatter(item:Object, column:DataGridColumn):String
        {
            return MoedaFormatter.format(item.Value);
        }

    ]]>
</fx:Script>

<fx:Declarations>
    <mx:CurrencyFormatter id="MoedaFormatter" precision="2" currencySymbol="R$" alignSymbol="left" decimalSeparatorTo="," decimalSeparatorFrom=","  thousandsSeparatorFrom="." thousandsSeparatorTo="."/>
</fx:Declarations>

<s:HGroup>

    <s:VGroup>
        <s:Label text="Cost 1"/>
        <mx:DataGrid id="dgA"
                     allowMultipleSelection="true" 
                     dragEnabled="true" 
                     dropEnabled="true" 
                     dragMoveEnabled="true">
            <mx:columns>
                <mx:DataGridColumn dataField="Expense"/>
                <mx:DataGridColumn dataField="Value" labelFunction="LabelFormatter"/>
            </mx:columns>    
        </mx:DataGrid>
    </s:VGroup>

    <s:VGroup>
        <s:Label text="Cost 2"/>
        <mx:DataGrid id="dgB"
                     allowMultipleSelection="true" 
                     dragEnabled="true" 
                     dropEnabled="true" 
                     dragMoveEnabled="true"
                     editable="true"
                     itemEditBeginning="disableEditing(event);">
            <mx:columns>
                <mx:DataGridColumn dataField="Expense"/>
                <mx:DataGridColumn dataField="Value" editorDataField="value" labelFunction="LabelFormatter">
                    <mx:itemEditor>
                        <fx:Component>
                            <mx:NumericStepper stepSize="1" width="35" height="20">
                                <fx:Script>
                                    <![CDATA[
                                        override public function set data(value:Object):void
                                        {
                                            super.data = value;

                                            if (value && value.hasOwnProperty("minNo")) {
                                                minimum = value.minNo;
                                            }

                                            if (value && value.hasOwnProperty("maxNo")) {
                                                maximum = value.maxNo;
                                            }
                                        }
                                    ]]>
                                </fx:Script>
                            </mx:NumericStepper>
                        </fx:Component>
                    </mx:itemEditor>
                </mx:DataGridColumn>
            </mx:columns>    
        </mx:DataGrid>
    </s:VGroup>

</s:HGroup>

提前致谢!

当您从 dgA 删除项目时,您删除的对象包含 minNo 和 maxNo 属性,并且挂钩数据更改的脚本 属性 分配项目渲染器的最小和最大属性。

所以,只需删除嵌套在 dgB 中的标签或对其进行注释即可。

修改你的itemeditor中设置数据的方法如下

override public function set data(value:Object):void {
     super.data = value;
     if (value && value.hasOwnProperty("Value")) {
        super.value = value.Value;
     }
     if (value && value.hasOwnProperty("minNo")) {
        minimum = value.minNo;
     }

     if (value && value.hasOwnProperty("maxNo")) {
        maximum = value.maxNo;
     }
}

我自己测试过,运行良好