|
assertlabel和setlabel可以新增标签。但是如果想要增加一个标签存放表格,该如何处理呢?在手册中没有发现相关的命令,于是自己想办法来解决了。仔细观察手工插入的三行一列的表格标签,发现其树结构如下:/ I6 e5 L7 o# q- x
; a% l" j) V! `7 b. H4 B/ I% V
, }7 C1 [5 X# K; k
思路1:9 t8 b, C4 I% J4 e1 L- D% i
使用assertsubnode命令插入两次子节点来完成标签表格中的一个单元格。
; e* S# _: F( D7 v2 p
# x b5 d9 e0 e5 k( L3 M- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签。% O. ~* K1 o/ n6 l4 H `" ^
- //treenode labeltable=assertlabel(item,"order",DATATYPE_STRING); P7 D9 }. C- V0 K+ _
- //此处增加什么类型的标签都可以。即使是文本型标签,也可以在表格中存放数值型数据。
6 U( Y/ M8 t, w! |) a - //表格中存放的数据类型与此无类,会在后面的在代码中定义。
; o8 K8 b/ g+ B - 9 x& b0 N$ K% F: }) y {
- for (int i = 1; i <= 3; i++) {
+ l, b( d% R4 ~, z0 \+ r - string labeltablerowname=concat("类型" , numtostring(i));, x+ B* K2 y$ R; v2 i
- treenode labeltablerow=assertsubnode(labeltable,labeltablerowname);//在标签中增加一行) v5 T9 Q0 H$ ^" |% S# x
- //第二参数不能省略,所以必须为该行起一个名字。如果名字相同的话,只会插入一个的节点。8 ?8 ?% S6 z6 }$ |( g* G
- //第三参数可以省略。该行节点不存放具体数据,所以数据类型可以留空。: f) S0 g( { V! @# J
- treenode labeltablecell=assertsubnode(labeltablerow,"数量",DATATYPE_NUMBER);//在新增行中加入一列(一个存放数据的单元格)
" d% T5 o( K, ^: u0 Q: @/ \ - //因为该节点要存放数值,所以数据类型要设置正确。 ; n; R9 H) K" D( C+ ^
- int num=duniform(0,5);, T# I) i- }7 B) u( z' e
- //setnodenum(labeltablecell,num);//为该数据单元赋值" O: z0 w. n- S$ F0 D3 U/ E" B9 i
- settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。0 s' _# f# r: B" Y2 d& M# V
- }
7 @3 M$ T1 `1 W# S. z; ?# S
复制代码 思路2:$ |& U& d1 r9 P+ J4 E2 Z+ t
既然assertsubnode可以,那nodeinsertinto也行得通。
6 ?/ q; H+ D! v( Q! R- treenode labeltable=nodeinsertinto(node(">labels", item));//在临时实体上增加一个标签,该标签没有名字
* n3 j8 I" u* `* d( p) p - for (int i = 1; i <= 3; i++) {0 _9 a f' y4 v' w. J) t. L% ^8 q
- treenode labeltablerow=nodeinsertinto(labeltable);//在标签中增加一行8 }/ A; F" N5 p8 F
- treenode labeltablecell=nodeinsertinto(labeltablerow);//在新增行中加入一列(一个存放数据的单元格)
: a; q0 v; j9 a8 ?+ \% ^ - nodeadddata(labeltablecell,DATATYPE_NUMBER);//指定该单元格节点的数据类型为数值型( h, i; C8 g$ u
- //虽然命令帮助中没有说明,但nodeinsertinto返回对新插入节点的引用。
9 m) v7 T. x) ?8 e# b - int num=duniform(0,5);/ P; a# X5 j5 f( |
- //setnodenum(labeltablecell,num);//为该数据单元赋值
j! r" w% i0 |6 ~ - settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。# Z2 G, u2 ?4 `4 k( O/ [3 ?) z( `! t2 Q
- }
复制代码 思路3:* k: R9 Z2 K' _& E: Z
既然标签中存放的是表格,那是不是可以使用表格相关命令呢?直接在节点上插入一张表格?1 i/ n0 V! }9 ?- i/ m4 m$ w, c6 @! M
- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签9 j w* |) _: O$ R
- settablesize(labeltable,3,1,DATATYPE_NUMBER); 6 A2 e2 |/ D" y, G: g5 H- n
- for (int i = 1; i <= 3; i++) {
0 C4 l7 ?2 x1 M' o - settablenum(labeltable,i,1,duniform(0,5));
; R o2 J+ k4 Z0 F; Z" f+ M - }
复制代码
5 L6 p' J6 M' r6 v% [- v5 [' ^$ U1 u5 b) z
3 @7 ~: }7 ~2 y* { M9 g |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|