|
assertlabel和setlabel可以新增标签。但是如果想要增加一个标签存放表格,该如何处理呢?在手册中没有发现相关的命令,于是自己想办法来解决了。仔细观察手工插入的三行一列的表格标签,发现其树结构如下:: N1 b! i. c. \0 W/ ~5 X; O
. C( n2 |) @: g2 I* A$ p
" G& a+ N0 o! x4 ~1 F i3 `: l3 f思路1:6 D. [' J; R4 O4 M
使用assertsubnode命令插入两次子节点来完成标签表格中的一个单元格。
2 t( B. ]- Y1 ?- P& w
1 A8 Q5 @. x" z- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签。
6 Z$ ~# q. K5 u - //treenode labeltable=assertlabel(item,"order",DATATYPE_STRING);
- U2 o1 t8 r7 w% m) f' ? - //此处增加什么类型的标签都可以。即使是文本型标签,也可以在表格中存放数值型数据。$ \6 ^3 J) p* A# O, N3 \4 M
- //表格中存放的数据类型与此无类,会在后面的在代码中定义。, u! h# E0 J& i$ U0 S0 G2 {
$ h. ~3 L) D9 b2 H- w$ y- for (int i = 1; i <= 3; i++) {
( L# A; g0 d7 } - string labeltablerowname=concat("类型" , numtostring(i));4 M# }# p. T6 S
- treenode labeltablerow=assertsubnode(labeltable,labeltablerowname);//在标签中增加一行/ d0 M8 W* C6 x N1 T
- //第二参数不能省略,所以必须为该行起一个名字。如果名字相同的话,只会插入一个的节点。
; A: \9 m2 Y1 E5 {6 o. n: ] - //第三参数可以省略。该行节点不存放具体数据,所以数据类型可以留空。
4 W, }# a9 F5 }+ Y3 C4 W# V: ^ - treenode labeltablecell=assertsubnode(labeltablerow,"数量",DATATYPE_NUMBER);//在新增行中加入一列(一个存放数据的单元格)
5 r4 [: X" T, R2 S9 C0 m - //因为该节点要存放数值,所以数据类型要设置正确。 3 O( l; U) z1 e4 e) Z2 @ T7 w
- int num=duniform(0,5);; t! M: d' V- b: {
- //setnodenum(labeltablecell,num);//为该数据单元赋值
% E- J) p, w" j( { - settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。
; K: h% E3 l9 i" ]3 Z - }
3 q, N b8 ^- ^3 N% H
复制代码 思路2:; v# s& F8 r+ L+ A
既然assertsubnode可以,那nodeinsertinto也行得通。
8 N* z/ _; }# c9 \4 g+ k- treenode labeltable=nodeinsertinto(node(">labels", item));//在临时实体上增加一个标签,该标签没有名字
: B( Z' |) c/ |& X - for (int i = 1; i <= 3; i++) {8 l& E, [% A+ y% J4 V6 v W! x6 D
- treenode labeltablerow=nodeinsertinto(labeltable);//在标签中增加一行/ z5 A% y. c0 [2 \/ |
- treenode labeltablecell=nodeinsertinto(labeltablerow);//在新增行中加入一列(一个存放数据的单元格)
6 Q! T" O% q$ ~7 x6 G - nodeadddata(labeltablecell,DATATYPE_NUMBER);//指定该单元格节点的数据类型为数值型, S1 ?4 s# F0 [8 n
- //虽然命令帮助中没有说明,但nodeinsertinto返回对新插入节点的引用。' h( Z& U5 W+ N; z- I
- int num=duniform(0,5);3 ^7 i _, N' K% u1 x
- //setnodenum(labeltablecell,num);//为该数据单元赋值
L" E1 Z: ?$ }$ ?) ]. } - settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。
9 P1 v& w6 t$ Y% a - }
复制代码 思路3:7 X. V2 C' |2 d' A9 W
既然标签中存放的是表格,那是不是可以使用表格相关命令呢?直接在节点上插入一张表格?
+ D6 h& A& Y( t# w# S- o- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签
! J+ ?6 C0 e6 w$ P& H( e) q - settablesize(labeltable,3,1,DATATYPE_NUMBER); 0 t# J, }" V. Q( V& x0 c: i1 y) Y) o
- for (int i = 1; i <= 3; i++) {
$ C. L4 `+ u& B+ ]+ N - settablenum(labeltable,i,1,duniform(0,5));( _2 A. G Q2 ~( ?0 [& N4 s
- }
复制代码 : Y2 w7 {# }( s' T6 h
* k- }& {1 I5 y m5 U- K- a
0 v$ F9 ]' w% c6 a
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|