2014-09-04 34 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