[]
开发者可以自己添加一个默认值属性,自己处理默认值逻辑,不过这个方法并不推荐。活字格为表单类插件提供了默认值支持。只需让单元格的类型实现 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);