Uploaded image for project: 'ZK Spreadsheet'
  1. ZK Spreadsheet
  2. ZSS-837

Delete a data validation on a cell doesn't remove browser's dropdown list

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Normal Normal
    • 3.7.0
    • 3.6.0
    • None
    • Security Level: Jimmy
    • None

      Steps to Reproduce

      1. 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>
        
      2. delete validation on B1
        but the dropdown list doesn't disappear
      3. 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)

            henrichen henrichen
            hawk hawk
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: