1

セルをクリックして値を編集し、元の値から一定の割合だけ逸脱した新しい値を入力すると、Flexicious DataGrid に変更の確認を求めさせようとしています。これを行う簡単な方法がわかりません。最初に、ブール値を返す itemEditorValidatorFunction を作成しようとしました。これは、ハード コードされた戻り値に対しては完全に機能しますが、Alert の CloseEvent から戻り値を取得しようとすると、その値は無視されます。

    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;
    }

また、com.flexicious.controls.TextInput を拡張した grids:FlexDataGridColumn の itemEditor を作成しようとしましたが、どのメソッドをオーバーライドするかがわかりませんでした。メソッドをオーバーライドして、Alert が OK をクリックした場合にのみ super を呼び出したいと思っていましたが、どのメソッドをオーバーライドする必要があるかわかりませんでした。保護された関数 onTextInput(textEvent:TextEvent):void をオーバーライドしようとしましたが、何もしませんでした。

この問題についての洞察に感謝します。

4

2 に答える 2

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;
    }
于 2014-09-08T09:55:38.557 に答える
0

誰かがあなたの質問に反対票を投じた理由がわかりませんが、それはかなり有効なようです。これを見ると、ユーザーがボックスで「いいえ」を選択したときに編集を「元に戻す」ことが最善の方法です。enableTrackChanges をオンにしている場合は、dgGrid.changes コレクションからその変更を削除し、dgGrid.refreshCells() を呼び出すだけです。enableTrackChanges がない場合は、dataProvider 行を古い値で更新し、dgGrid.refreshCells() を呼び出すだけで設定できます。

于 2014-09-05T03:28:55.193 に答える