/// <summary> /// update the display /// </summary> public void updateDisplay(String displayValue, bool isNull, bool calledFromEditSet) { MgControlBase ctrl; MgControlBase ctrlValue = null; String defaultValue = "" + GuiConstants.DEFAULT_VALUE_INT; String savedValue = null; String savePrevValue = null; bool savedIsNull = false; bool savePrevIsNull = false; if (_controls != null) { MgControlBase firstControlValue = null; bool foundControlValue = false; MgControlBase savedControlToFocus = ControlToFocus; for (int i = 0; i < _controls.getSize(); i++) { ctrl = _controls.getCtrl(i); if (calledFromEditSet) { savedValue = ctrl.Value; savePrevValue = ctrl.getPrevValueInArray(ctrl.getDisplayLine(true)); savedIsNull = ctrl.IsNull; savePrevIsNull = ctrl.getPrevIsNullsInArray(); } if (!ctrl.getForm().inRefreshDisplay()) { ctrl.resetPrevVal(); // force update of the display ctrl.SetAndRefreshDisplayValue(displayValue, isNull, false); // Even if the control that contains the correct value is found we don't break the loop because: // (1) we need to refresh all the controls // (2) the last control that was focus with the correct value is the one that should be checked if (!ctrl.isRadio()) { if (ctrlValue == null || ctrl.Value != null && !ctrl.Value.Equals(defaultValue) && (ctrl == savedControlToFocus)) { ctrlValue = ctrl; } } else { //Fixed bug#:780359, for radio control select the correct control //if not found any ctrlvalue(the control that was in focuse) //select the first control with the correct value if not exist select the first control. //a. save the first control (with or without the correct value) if (firstControlValue == null) { firstControlValue = ctrl; } if (ctrl.Value != null && !ctrl.Value.Equals(defaultValue)) { //b. save the first control with the correct value if (!foundControlValue) { firstControlValue = ctrl; foundControlValue = true; } //c.save the control that belong to the focus control if (ctrl == savedControlToFocus) { ctrlValue = ctrl; } else if (ctrlValue == null) { ctrlValue = firstControlValue; } } } } if (calledFromEditSet) { ctrl.setValueForEditSet(savedValue, savePrevValue, savedIsNull, savePrevIsNull); } } // if there was a control that had the correct value and this field is linked to more than one // control then it means that the control that contained the correct value might have been reset by // one of its siblings so there is a need to refresh its value again. if (ctrlValue != null) { if (calledFromEditSet) { savedValue = ctrlValue.Value; savePrevValue = ctrlValue.getPrevValueInArray(ctrlValue.getDisplayLine(true)); savedIsNull = ctrlValue.IsNull; savePrevIsNull = ctrlValue.getPrevIsNullsInArray(); } //save the control that belong to the value on the field. ControlToFocus = ctrlValue; if (_controls.getSize() > 1) { ctrlValue.resetPrevVal(); // force update of the display ctrlValue.SetAndRefreshDisplayValue(displayValue, isNull, false); } if (calledFromEditSet) { ctrlValue.setValueForEditSet(savedValue, savePrevValue, savedIsNull, savePrevIsNull); ctrlValue.getForm().getTask().setLastParkedCtrl(ctrlValue); Manager.SetFocus(ctrlValue, -1); } //Fixed bug#:465616, when the control is the current focus control then refresh his focus control if (ctrlValue.isRadio() && ctrlValue == ctrlValue.getForm().getTask().getLastParkedCtrl()) { Manager.SetFocus(ctrlValue, -1); } } } }