|
assertlabel和setlabel可以新增标签。但是如果想要增加一个标签存放表格,该如何处理呢?在手册中没有发现相关的命令,于是自己想办法来解决了。仔细观察手工插入的三行一列的表格标签,发现其树结构如下:
. a7 \" I4 s" _7 }$ C5 p) z, \" q
: g+ [6 e X2 P: C
5 a7 E) R/ Q/ \6 p3 {+ G思路1:
, }5 P. M4 R5 a2 M' |4 x* W使用assertsubnode命令插入两次子节点来完成标签表格中的一个单元格。
5 _7 \: n7 Z9 z- q
: j- o5 E( F8 y: a' D- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签。
( k$ U$ ]. \$ K0 }! l- F) ? - //treenode labeltable=assertlabel(item,"order",DATATYPE_STRING);
+ L# Z) t2 h4 ~% g" P - //此处增加什么类型的标签都可以。即使是文本型标签,也可以在表格中存放数值型数据。& n1 v2 Z, X- G. J
- //表格中存放的数据类型与此无类,会在后面的在代码中定义。
, U9 C4 K, h% t, U# W8 e2 Z( U
; K4 _7 s0 I% r7 j- for (int i = 1; i <= 3; i++) {
% }; i( p( ~* h8 Q) Q: @# E |; E3 m - string labeltablerowname=concat("类型" , numtostring(i));
- N! ]- H) f' c- `+ Z# P- I - treenode labeltablerow=assertsubnode(labeltable,labeltablerowname);//在标签中增加一行' t4 C+ O. f# Q
- //第二参数不能省略,所以必须为该行起一个名字。如果名字相同的话,只会插入一个的节点。$ O; |* T2 i3 I! Z T, a, g
- //第三参数可以省略。该行节点不存放具体数据,所以数据类型可以留空。
6 w) I* _2 }$ S P8 M1 @ - treenode labeltablecell=assertsubnode(labeltablerow,"数量",DATATYPE_NUMBER);//在新增行中加入一列(一个存放数据的单元格)+ h7 |% t; G5 {6 E: g, d0 p
- //因为该节点要存放数值,所以数据类型要设置正确。
& d6 m9 q5 d C9 |" W+ v7 K - int num=duniform(0,5);% @3 L K8 G% _. h# F+ E# B
- //setnodenum(labeltablecell,num);//为该数据单元赋值$ Y4 ^. j+ H" x' x5 P& l$ L
- settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。9 U/ [- A( Y }6 k% \6 {
- }$ D/ s0 H, _. Y" b, ?5 s
复制代码 思路2:( f$ L* V/ z+ h, y
既然assertsubnode可以,那nodeinsertinto也行得通。
X( C5 |0 l5 q6 K( l- treenode labeltable=nodeinsertinto(node(">labels", item));//在临时实体上增加一个标签,该标签没有名字
" f H ?5 H ] g- X - for (int i = 1; i <= 3; i++) {
+ {: s8 q0 g- M% W) K) M' r+ d, X - treenode labeltablerow=nodeinsertinto(labeltable);//在标签中增加一行. r5 K; P1 k6 B) g
- treenode labeltablecell=nodeinsertinto(labeltablerow);//在新增行中加入一列(一个存放数据的单元格)
2 }. W& b; m. B* k* Z. K* B* t - nodeadddata(labeltablecell,DATATYPE_NUMBER);//指定该单元格节点的数据类型为数值型& F% J8 x8 \& N7 k' h% M& u9 g" F
- //虽然命令帮助中没有说明,但nodeinsertinto返回对新插入节点的引用。8 h9 N' A* p* d: n, P" L1 F* k
- int num=duniform(0,5);
: y0 Z- O2 i, o4 q - //setnodenum(labeltablecell,num);//为该数据单元赋值
" J- P# }) C. ~# {/ b( O: L# d - settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。
2 d* K6 W2 D' B: G - }
复制代码 思路3:# i. {, n' \3 O# O( l9 u& g0 u( V0 B
既然标签中存放的是表格,那是不是可以使用表格相关命令呢?直接在节点上插入一张表格?4 q- d p& D8 j0 O5 _& c
- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签
$ ?: O! F% q# F% |, K - settablesize(labeltable,3,1,DATATYPE_NUMBER); $ p. k' V- Q7 {( Z
- for (int i = 1; i <= 3; i++) {
1 _5 b# _/ H8 D. C; a3 C6 f - settablenum(labeltable,i,1,duniform(0,5));6 {& I- B+ E/ p1 e7 Q
- }
复制代码
, ]# q" H3 N$ h2 J, Q. r0 f3 O0 {* V
/ e6 J& G% s$ o' x v( Z; q- i/ q7 q3 \
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|