|
assertlabel和setlabel可以新增标签。但是如果想要增加一个标签存放表格,该如何处理呢?在手册中没有发现相关的命令,于是自己想办法来解决了。仔细观察手工插入的三行一列的表格标签,发现其树结构如下:
4 S: g5 m# R! I! P' w& d% R
2 Y; M# I& s4 N* `, E
: M! W8 d" U' K+ M; u0 c! d思路1:* P" H1 o% Y" ^& n/ O
使用assertsubnode命令插入两次子节点来完成标签表格中的一个单元格。
9 ?# o6 H/ _- R3 r% ~
; {( b/ Q* r; T" c0 a) [2 D' w; n- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签。+ ]2 A+ g- Y( ~
- //treenode labeltable=assertlabel(item,"order",DATATYPE_STRING);
% H; p7 u. Y* L9 g ]4 q2 \/ I - //此处增加什么类型的标签都可以。即使是文本型标签,也可以在表格中存放数值型数据。
& j; a, f9 J9 l- \% p/ m0 ] - //表格中存放的数据类型与此无类,会在后面的在代码中定义。* ?2 I1 Z$ k7 y# |
- a( U$ f' p( y( ]- ^5 M1 q, E5 e- for (int i = 1; i <= 3; i++) {
& v5 i, X& x6 @+ P T - string labeltablerowname=concat("类型" , numtostring(i));
% T! V) {1 M( u0 r) G& f4 C - treenode labeltablerow=assertsubnode(labeltable,labeltablerowname);//在标签中增加一行. t0 i# X6 N, i: E, F6 f9 T3 ~" v
- //第二参数不能省略,所以必须为该行起一个名字。如果名字相同的话,只会插入一个的节点。! ~) R7 F& s: H9 n& E6 j
- //第三参数可以省略。该行节点不存放具体数据,所以数据类型可以留空。
. J6 A4 z0 e: U% K6 i* x* N& { - treenode labeltablecell=assertsubnode(labeltablerow,"数量",DATATYPE_NUMBER);//在新增行中加入一列(一个存放数据的单元格)
/ b$ }& _3 F" o - //因为该节点要存放数值,所以数据类型要设置正确。
2 G+ {. H \+ o$ C - int num=duniform(0,5);
9 A5 H6 T% Y! L4 w - //setnodenum(labeltablecell,num);//为该数据单元赋值! U9 |; j z2 U/ ]' x0 C
- settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。7 y- Q' [: O- L* S% e! J
- }
% J: l. f3 [, y3 b- N3 N
复制代码 思路2:
% c8 ?% ~/ |. t) Z: M既然assertsubnode可以,那nodeinsertinto也行得通。
# O, p4 W' I. A# M. M% N: w- treenode labeltable=nodeinsertinto(node(">labels", item));//在临时实体上增加一个标签,该标签没有名字
7 ?" }& s6 P5 ? - for (int i = 1; i <= 3; i++) {# H+ w2 m q4 i4 G6 L4 W& X
- treenode labeltablerow=nodeinsertinto(labeltable);//在标签中增加一行
) m6 m5 v) D6 a0 D5 K" W0 x" h - treenode labeltablecell=nodeinsertinto(labeltablerow);//在新增行中加入一列(一个存放数据的单元格)
! k* H0 M) v# d0 ~4 n' S; H) } - nodeadddata(labeltablecell,DATATYPE_NUMBER);//指定该单元格节点的数据类型为数值型
9 R/ T% i, ~7 X# I1 p - //虽然命令帮助中没有说明,但nodeinsertinto返回对新插入节点的引用。0 W3 m1 t/ l# S5 l* |. t+ o# d
- int num=duniform(0,5);
8 l# y" e( m% {- u5 |" N& b - //setnodenum(labeltablecell,num);//为该数据单元赋值" I9 `. q; g/ M
- settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。
! n3 U! z- M- T& A0 T7 h5 r - }
复制代码 思路3:
9 q/ v7 i8 p+ S& c, i既然标签中存放的是表格,那是不是可以使用表格相关命令呢?直接在节点上插入一张表格? ~- b. L# [ N" y8 N( l2 Q7 |
- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签
) S+ X; y, V/ B7 o6 |. x: ] - settablesize(labeltable,3,1,DATATYPE_NUMBER); . {. W$ e. v4 `
- for (int i = 1; i <= 3; i++) {
. h) S1 ]) t3 e5 A3 N: S - settablenum(labeltable,i,1,duniform(0,5));
8 i, e* f, w: p0 Y7 H - }
复制代码
. p3 A5 G1 w8 r. }, e& k/ ~
, u$ j1 A% l" w! _; f5 o. S. _) r5 [# H, n' R* l, H* y2 D
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|