-
Bug
-
Resolution: Fixed
-
Normal
-
3.6.0
-
None
-
Security Level: Jimmy
-
None
Steps to Reproduce
- load attached sheet
<zk> <button label="Add Validation" onClick="addValidation()" /> <button label="Add Validation with Array" onClick="addValidationWithArray()" /> <button label="Delete Validation" onClick="deleteValidation()" /> <spreadsheet id="ss" src="/WEB-INF/excel/deleteValidation.xlsx" vflex="1" hflex="1" maxVisibleRows="150" maxVisibleColumns="40" showToolbar="true" showSheetbar="true" showFormulabar="true" /> <zscript><![CDATA[ import org.zkoss.zss.api.*; import org.zkoss.zss.api.model.*; public void addValidation() { Range selectedRange = Ranges.range(ss.getSelectedSheet(), ss.getSelection()); selectedRange.setValidation(Validation.ValidationType.LIST, true, Validation.OperatorType.EQUAL, true, "A2:A4", null, true,"title", "msg", true, Validation.AlertStyle.WARNING, "alert title", "alert msg"); } public void addValidationWithArray() { Range selectedRange = Ranges.range(ss.getSelectedSheet(), ss.getSelection()); selectedRange.setValidation(Validation.ValidationType.LIST, true, Validation.OperatorType.EQUAL, true, "{\"d\",\"e\",\"f\"}", null, true,"title", "msg", true, Validation.AlertStyle.WARNING, "alert title", "alert msg"); } public void deleteValidation() { Range selectedRange = Ranges.range(ss.getSelectedSheet(), ss.getSelection()); selectedRange.deleteValidation(); } ]]></zscript> </zk>
- delete validation on B1
but the dropdown list doesn't disappear - delete validation on D7
Actual Result
dropdown list on D7 and B1 disappear.
Expected Result
on Step 2, dropdown list on B1 should disappear.
Root Cause
Because zss model only notify and update the data validation whose region is null.
public class SheetImpl extends AbstractSheetAdv { ... @Override public List<SDataValidation> deleteDataValidationRegion(CellRegion region) { List<SDataValidation> dels = new ArrayList<SDataValidation>(); for (SDataValidation validation : getDataValidations()) { validation.removeRegion(region); if (validation.getRegions() == null) { dels.add(validation); } } for (SDataValidation validation : dels) { deleteDataValidation(validation); } return dels; }
Notice the statement: if (validation.getRegions() == null)