SMART datagrid v.1 > Concepts

Back  Forward

Concepts.Expression Overivew

SMART datagrid达式是在网格用于显示和处理数据的公式。 虽然包含可方便处理值的几种特殊运算符,但已被尽可能地简单定义和体现,以便也可以用于大型数据组。 

特别是,因为现有语言中的关系、比较、逻辑运算符的优先级已被整合为一,所以必要时,需要括在括号内。 除值以外的表达式文本不区分大小写。 

它被用于EditValidation.expressionDynamicStyle.expression等。 

1. Syntax Grammer
Expression ::= ComparisonExpression (LogicalOperator ComparisonExpression)*
ComparisonExpression ::= SimpleExpression (ComparisonOperator SimpleExpression | SetOperator ExpressionList)*
ExpressionList ::= "()" | "(" SimpleExpression ("," SimpleExpression)* ")"
SimpleExpression ::= Term *(AddingOperator Term)
Term ::= Factor (MultiplyingOperator Factor)*
Factor ::= "(" Expression ")" | Variable | Constant | Converting Factor | Unary Factor
Constant ::= Unsigned Number | Charactor String | null | empty | defined | nan | true | false
2. Operators

从优先级较高的开始显示。 包含在同一集中的运算符之间没有优先级。 如果想强制性赋予优先级,就需要括在括号内。 集合(Set)运算符和比较(Comparison)运算符的优先级是相同的。 

Table-1  常数(Constants)
Operator说明例题
nullJavaScript nullis, is not等只用于操作数。value is null
empty空值。undefined, null, 空字符串。is, is not等只用于操作数。value is empty
defined非JavaScript undefiend的值。is, is not等只用于操作数。value is defined
nanJavaScript NaNis, is not等只用于操作数。value is nan
true, falseJavaScript true, falsevalue == true
Table-2  转换(Converting)运算符
Operator说明例题结果
str转换为字符串str 100'100'
num转换为数字num '199'199
int转换为Integerint '199.9'int
date转换为Date。当比较转换的两个值时,使用Date.getTime()值。date '2010/11/11' <= local date
date('2010-11-11') <= utc date
date('2010-11-11T00:00:00+09:00')
必须是可以通过JavaScript的Date对象构造函数而传递的字符串。特别是,如果想让包含时间值的日期比较运算同样动作在所有浏览器,就必须使用包含时区的ISO标准格式。
请参考Date.parse函数。
bool转换为Booleanbool '1'true
Table-3  一元(Unaray)运算符
Operator说明例题结果
not, !逻辑非not true, ! truefalse
-负数-100-100
+正数+100100
len字符串长度len 'abcd'4
rand大于0且小于参数的随机整数rand 10015
srand相当于通过参数而指定的长度的Ascill字符串srand 7'xfeDfdG'
lower变更通过参数而指定的字符串为小写字符串lower 'AbcdEf''abcdef'
upper变更通过参数而指定的字符串为大写字符串upper 'AbcdEf''ABCDEF'
Table-4  乘法(Multiplying)运算符
Operator说明例题结果
*11 * 222
/5 / 22.5
div整数除法5 div 22
% (mod)余数5 % 2, 5 mod 21
Table-5  加法(Adding)运算符
Operator说明例题结果
+11 + 213
-5 - 23
Table-6  比较(Comparison)运算符
Operator说明例题结果
==, !=, <, <=, >, >=比较true|false
is比较value is null, value is empty, value is defined, value is nantrue|false
is not比较value is not null, value is not empty, value is not defined, value is not nantrue|false
match, not match正则表达式value match '[^d.-+]'true|false
imatch, not imatch不区分大小写的正则式value match '[^d.-+]'true|false
like, not like文本比较value like '%abc%', value not like '%abc', value like 'abc%true|false
ilike, not ilike不区分大小写的文本比较value ilike '%abc%', value not ilike '%abc', value ilike 'abc%true|false

*集合运算符和比较运算符的优先级是相同的。 

Table-7  集合(Set)运算符
Operator说明例题结果
in, not in包含3 in (1, 2 3), value not in ('a', 'b', 'c')
右移运算符必须是用括号('(', ')')括起并且项目用逗号(',')区分的列表。
true|false
Table-8  逻辑(Logical)运算符
Operator说明例题结果
&&逻辑乘(And)true && falsefalse
||逻辑或(Or)true || falsetrue
Code -1
    grid.setColumns([{
        fieldName: 'product_id',
        styles: [{
            expression: "value > 1000",
            styles: {
                background: "#01ff0000",
                ...
            }
        }]
    ], {
        ...
    }]);
Code -2
    column.setValidations([{
        "expression": "value is not empty",
        "level": DataLudi.ValidationLevel.ERROR,
        "message": strings["CommCodeMsg"]
    }]);
See Also
DynamicStyle
EditValidation
DataColumn.dynamicStyles
GridBody.dynamicStyles
Examples
列动态样式
默认动态样式
单元格验证
行验证