about Flex DataGrid edit

Summary(概述): Adobe Flex 的 dataGrid 有很强大的功能,比如ItemRenderer,headerRenderer等,可以方便地实现自己想要的功能。但对dataGrid直接编辑并保存到Service端,就有点麻烦了。

 

Requirement(需求): 对dataGrid进行单位格编辑,若有变化,保存到Service; 否则不保存。

 

Solution(解决方案): 运用DataGrid 的 itemEditBegin 事件、itemFocusOut 事件。

1.  when the itemEditBegin is dispatched, the event handler should save this cell value as old value.(编辑前保存旧值)

2. when the listener of itemFocusOut is responding, you should check the current cell to the old value. If it's value have changed, you should save the new value to Service.(编辑后判断,是否更改。)

 

Example(例子)  as follow:

 

<mx:Script>

        <![CDATA[

 

 

private var oldValueOfEditedItem: CreditVO;


 

   private function creditDGEditBegin(event: DataGridEvent): void {

             oldValueOfEditedItem = (event.itemRenderer.data as CreditVO).clone() as CreditVO;

            }

 

            private function editedItemChanged(newValue: CreditVO): Boolean {

             return (newValue.amount != oldValueOfEditedItem.amount)|| 

               (newValue.description != oldValueOfEditedItem.description);

            }

            private function creditDGEditEnd(event: DataGridEvent): void {

             var newValue: CreditVO = event.itemRenderer.data as CreditVO;

             if (editedItemChanged(newValue)) {

             dispatchEvent(new UpdateCreditEvent(newValue))

             }

            }

 

 

 

  ]]>

    </mx:Script>

 

 

 

 <mx:DataGrid id="creditLineDG"

     dataProvider="{creditLineDGData}"

        width="100%"

        itemEditBegin="creditDGEditBegin(event)"

        itemFocusOut="creditDGEditEnd(event)"

        selectable="true"

        allowMultipleSelection="false"     

        name="inbox"

        paddingLeft="0"

        height="100%"

        textAlign="right"

        editable="true"

        >

        <mx:columns>      

 

            <mx:DataGridColumn textAlign="center" headerText="Reg" dataField="regSelected" editable="false" sortable="false" width="30">

             <mx:headerRenderer>

                 <mx:Component>

                 <mx:VBox horizontalAlign="center" verticalGap="-2" 

                 horizontalScrollPolicy="off" verticalScrollPolicy="off">

                 <mx:Label text="Reg"/>

                 <mx:CheckBox id="buffer1"  selected="{outerDocument.regSelectedAll}" click="outerDocument.clickReg(event); "/>

                 </mx:VBox>

                 </mx:Component>

                </mx:headerRenderer>

             <mx:itemRenderer>

             <mx:Component>

             <mx:CheckBox selected="{data.regSelected}" click="{data.regSelected = !data.regSelected;outerDocument.checkClick(event);}" />

             </mx:Component>

             </mx:itemRenderer>

            </mx:DataGridColumn>

 

            <mx:DataGridColumn textAlign="center" headerText="Buffer1" dataField="buffer1Selected" editable="false" sortable="false" width="55">

             <mx:headerRenderer>

                 <mx:Component>

                 <mx:VBox horizontalAlign="center" verticalGap="-2"

                 horizontalScrollPolicy="off" verticalScrollPolicy="off">

                 <mx:Label text="Buffer1"/>

                 <mx:CheckBox id="reg" selected="{outerDocument.bufferSelectedAll}" click="outerDocument.clickBuffer1()"/>

                 </mx:VBox>

                 </mx:Component>

                </mx:headerRenderer>

             <mx:itemRenderer >

             <mx:Component>

             <mx:CheckBox selected="{data.buffer1Selected}" click="data.buffer1Selected = !data.buffer1Selected;outerDocument.checkClick(event);" />

             </mx:Component>

             </mx:itemRenderer>

            </mx:DataGridColumn>

 

            <mx:DataGridColumn headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'START_DATE')}"

                dataField="startdate"

                textAlign="left"

                editable="false"

                labelFunction="labelFunction"/>

            <mx:DataGridColumn headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'END_DATE')}"

                dataField="enddate"

                textAlign="left"

                editable="false"

                labelFunction="labelFunction"/>

            <mx:DataGridColumn headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'TYPE')}"

                dataField="type"

                editable="false"

                textAlign="left"

                />

            <mx:DataGridColumn headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'PROVIDER_NAME')}"

                dataField="providername"

                textAlign="left"

                visible="false"

                editable="false">

            </mx:DataGridColumn>

             <mx:DataGridColumn headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'PROVIDER_NAME')}"

                dataField="providername"

                textAlign="left"

                visible="false"

                editable="false">

            </mx:DataGridColumn>

            <mx:DataGridColumn headerText="Nominal Amount"

                dataField="commitmentfeed"

                labelFunction="currencyLabel"

                textAlign="right"                

                editable="false" >

             <mx:headerRenderer>

                 <mx:Component>

                 <mx:VBox horizontalAlign="center" verticalGap="-2" horizontalScrollPolicy="off" verticalScrollPolicy="off">

                 <mx:Label text="Nominal"/>

                 <mx:Label text="Amount"/>

                 </mx:VBox>

                 </mx:Component>

                </mx:headerRenderer>                

            </mx:DataGridColumn>

 

            <mx:DataGridColumn headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'AMOUNT')}"

                dataField="amount" 

                labelFunction="currencyLabel"

                textAlign="right" 

                editable="true" >

             <mx:headerRenderer>

                 <mx:Component>

                 <mx:VBox horizontalAlign="center" verticalGap="-2" horizontalScrollPolicy="off" verticalScrollPolicy="off">

                 <mx:Label text="Market Value"/>

                 <mx:Label text="Available"/>

                 </mx:VBox>

                 </mx:Component>

               </mx:headerRenderer>

 

                <mx:itemEditor>

                  <mx:Component>            

                   <mx:TextInput text="{data.amount}" restrict="0-9.">            

                   </mx:TextInput> 

                 </mx:Component>

                </mx:itemEditor>

            </mx:DataGridColumn>

 

            <mx:DataGridColumn  headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'DESCRIPTION')}"

                dataField="description"

                textAlign="left"

                editable="true">

             <mx:itemEditor>

             <mx:Component>

             <mx:TextInput text="{data.description}">            

             </mx:TextInput>

             </mx:Component>

             </mx:itemEditor>

            </mx:DataGridColumn>

 

            <mx:DataGridColumn headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'CURRENCY')}"

                dataField="currency"

                editable="false"

                textAlign="left" width="60"

                />

 

            <mx:DataGridColumn headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'DRAWN_INTEREST')}"

                dataField="drawninterest"

                labelFunction="currencyLabel"

                visible="false"

                textAlign="right"

                />

            <mx:DataGridColumn headerText="{resourceManager.getString(JupiterConstants.RESOURCE_BUNDLE, 'UNDRAWN_INTEREST')}"

                dataField="undrawninterest"

                labelFunction="currencyLabel"

                visible="false"

                textAlign="right"

                />          

 

        </mx:columns>

    </mx:DataGrid>

 

 

注:该代码不能直接运行,因为有一些Class依赖于项目,但能解决问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值