Добавьте функцию itemEditorValidator с подтверждением всплывающего окна к Flexicious Grid
Я пытаюсь, чтобы моя Flexicious DataGrid запрашивала подтверждение изменения, когда я щелкаю ячейку, чтобы отредактировать значение и ввести новое значение, которое отклоняется от оригинала на определенный процент. Я не вижу простой способ сделать это. Первоначально я пытался написать itemEditorValidatorFunction, которая возвращает логическое значение. Это прекрасно работает для жестко закодированного возвращаемого значения, но если я попытаюсь взять возвращаемое значение из 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;
}
Я также попытался написать itemEditor для сеток:FlexDataGridColumn, где я расширил com.flexicious.controls.TextInput, но я не смог решить, какой метод переопределить. Я хотел переопределить метод и вызывать super только в том случае, если Alert нажал OK, но я не мог понять, какой метод мне следует переопределить. Я попытался переопределить защищенную функцию onTextInput(textEvent:TextEvent):void, но это ничего не сделало.
Я был бы благодарен за любое понимание этой проблемы.
2 ответа
Вот что работает:
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;
}
Не уверен, почему кто-то решил преуменьшить ваш вопрос, он кажется вполне обоснованным. Если посмотреть на это, то лучшим способом для вас будет "отменить" редактирование, когда пользователь выберет "нет" в поле. Если у вас включен enableTrackChanges, все, что вам нужно сделать, это удалить это изменение из коллекции dgGrid.changes и вызвать dgGrid.refreshCells(). Если у вас нет enableTrackChanges, все, что вам нужно сделать, это обновить строку dataProvider старым значением, вызвать dgGrid.refreshCells (), и вы должны быть установлены.