2014-09-04 66 views
1

我想让我的灵活数据网格请求确认更改当我单击一个单元格来编辑一个值并输入一个偏离原始值的新值百分比。我看不到一个简单的方法来做到这一点。最初,我试图编写一个itemEditorValidatorFunction,它返回一个布尔值。这完全适用于硬编码的返回值,但如果我尝试采取从警报的closeEvent的返回值,该值将被忽略:添加itemEditorValidatorFunction弹出窗口确认到Flexicious Grid

protected function validateGcCap(editor:UIComponent):Boolean{ 
     var warningBPDiffVal:Number = Number(5); 
     var warningPerCentDiffVal:Number = Number(warningBPDiffVal/1000); 
     var allowChange:Boolean = true; 
     var origGcCapVal:Number = Number(managerGrid.getCurrentEditingCell().text); 
     var newGcCapVal:Number = Number((editor as TextInput).text); 
     var diffVal:Number = Number(newGcCapVal - origGcCapVal); 

     if (origGcCapVal > newGcCapVal) { 
      diffVal = origGcCapVal - newGcCapVal; 
     } 

     if (diffVal > warningPerCentDiffVal) { 
      //Alert.show("you changed the gccap from " + origGcCapVal + " to " + newGcCapVal + " by " + diffVal); 

      function alertCloseHandler(event:CloseEvent):void{ 
       if (event.detail == Alert.CANCEL) { 
        allowChange = false; 
       } 
      }; 

      var alert:Alert = Alert.show("Are you sure that you want to update gcCap% by more than " + warningBPDiffVal + "bps?", 
        "Please Confirm", (Alert.OK | Alert.CANCEL), 
        this, alertCloseHandler); 
     } 

     return allowChange; 
    } 

我也试着写的itemEditor为网格:FlexDataGridColumn ,其中我扩展com.flexicious.controls.TextInput,但我无法确定要覆盖哪种方法。我想覆盖该方法,并且只在警报点击确定时才调用超级方法,但是我看不到应该覆盖哪个方法。我尝试覆盖保护功能onTextInput(textEvent:TextEvent):无效,但这没有做任何事。

我将不胜感激这个问题的任何洞察力。

回答

0

这是什么在起作用:

private function validateGcCap(editor:UIComponent):Boolean{ 
     var warningBPDiffVal:Number = Number(5); 
     var cell:IFlexDataGridCell = managerGrid.getCurrentEditingCell(); 
     var warningPerCentDiffVal:Number = Number(warningBPDiffVal/1000); 
     var origGcCapVal:Number = Number(cell.text); 
     var newGcCapVal:Number = Number((editor as TextInput).text); 
     var diffVal:Number = Number(newGcCapVal - origGcCapVal); 

     if (origGcCapVal > newGcCapVal){ 
      diffVal = origGcCapVal - newGcCapVal; 
     } 

     if (diffVal > warningPerCentDiffVal){ 

      function alertCloseHandler(event:CloseEvent):void{ 
       if (event.detail == Alert.CANCEL) { 
        IAParamsVO(cell.rowInfo.data).gcCapWrapper = origGcCapVal; 
        managerGrid.refreshCells(); 
       } 
      } 

      Alert.show("Are you sure that you want to update gcCap% by more than " 
           + warningBPDiffVal + "bps?", "Please Confirm", (Alert.OK | Alert.CANCEL), 
        this, alertCloseHandler); 
     } 

     return true; 
    } 
+0

在进行更改之前,您必须获取单元格的引用,然后在alertCloseHandler方法中按下CANCEL将该值设置回原始值。 – 2014-09-08 09:56:32

0

不知道为什么有人决定downvote你的问题,它似乎很有效。从这个角度来看,最好的方法是在用户选择“否”的情况下“撤销”编辑。如果启用了enableTrackChanges,则只需从dgGrid.changes集合中删除该更改并调用dgGrid.refreshCells()即可。如果你没有enableTrackChanges,你所要做的就是用旧值更新dataProvider行,调用dgGrid.refreshCells(),你应该设置。

+0

感谢。所以我应该使用与上面相同的代码,通过itemEditorValidatorFunction =“validateGcCap”调用该方法,无论用户选择何种Alert,都使该方法返回true,并让alertCloseHandler函数将dataProvider行设置回准备好的状态,然后调用dgGrid.refreshCells()? 感谢您的帮助。 – 2014-09-05 07:15:13

+0

以下工作。您必须先获取对单元格的引用,然后再将单元格.rowInfo.data转换为VO并将其值设置为原始值: 函数alertCloseHandler(event:CloseEvent):void { if( event.detail == Alert.CANCEL){ IAParamsVO(cell.rowInfo.data).gcCapWrapper = origGcCapVal; managerGrid.refreshCells(); } } – 2014-09-05 14:07:54

+0

很好听,请接受答案,如果它解决了你的问题。 – 2014-09-15 12:59:13

相关问题