Page tree
Skip to end of metadata
Go to start of metadata

开发者可以自己添加一个默认值属性,自己处理默认值逻辑,不过这个方法并不推荐。活字格为表单类插件提供了默认值支持。只需让单元格的类型实现 ISupportDefaultValue 接口即可。

    public class MyPluginCellType : CellType, ISupportDefaultValue
    {
        [FormulaProperty]
        [DisplayName("默认值")]
        public object DefaultValue { get; set; }

        public bool NeedFormatDefaultValue => false;
    }

注意,DefaultValue属性必须标注 [FormulaProperty]。

NeedFormatDefaultValue 属性是做什么的?

NeedFormatDefaultValue 返回True,活字格会做智能类型转换,例如DefaultValue输入 111,会保存数字 111,智能转换不一定总是对的,例如用户输入 111,222, 会被自动转为数字 111222 ,因为活字格认为这个逗号是数字的千分位。但是如果多选框多选时,会认为逗号是字符串的分隔符。这种情况让NeedFormatDefaultValue属性返回False是更好的选择。

NeedFormatDefaultValue 返回False,活字格不会做智能类型转换,如果DefaultValue输入111,会保存字符串“111”。

什么时候应该返回 True,什么时候应该返回False?

如果单元格的功能是输入文本的,应该返回False,而用于输入数字、日期时间等,应该返回True。

自定义获取单元格默认值逻辑

有时,单元格的默认值需要根据其他属性来决定。例如单元格有两个属性,默认单位和默认数量。用户需要分别配置,而单元格的默认值需要把默认单位和默认数量拼接起来。

此时,通过实现 ISupportDefaultValue 接口的方式无法实现动态效果。可以通过重写 getDefaultValue 方法实现自定义的默认值逻辑。

C# 代码:

using GrapeCity.Forguncy.CellTypes;
using GrapeCity.Forguncy.Plugin;

namespace MyPlugin
{
    public class MyPluginCellType : CellType
    {
        [FormulaProperty]
        public object DefaultCount { get; set; } = 10;

        [ComboProperty(ValueList = "个|包|捆|箱")]
        public object DefaultUnit { get; set; } = "包";
    }
}

JavaScript 代码:

class MyPluginCellType extends Forguncy.Plugin.CellTypeBase {
    createContent() {
        this.input = $("<input style='width:100%;height:100%'>");
        this.input.change(() => {
            this.commitValue();
        })
        return this.input;
    }
    setValueToElement(_, value) {
        this.input.val(value?.toString());
    }
    getValueFromElement() {
        return this.input.val();
    }
    getDefaultValue() {
        const value = this.evaluateFormula(this.CellElement.CellType.DefaultCount) +
            this.evaluateFormula(this.CellElement.CellType.DefaultUnit);
        return {
            Value: value
        };
    }
}
Forguncy.Plugin.CellTypeHelper.registerCellType("MyPlugin.MyPluginCellType, MyPlugin", MyPluginCellType);
  • No labels