|
assertlabel和setlabel可以新增标签。但是如果想要增加一个标签存放表格,该如何处理呢?在手册中没有发现相关的命令,于是自己想办法来解决了。仔细观察手工插入的三行一列的表格标签,发现其树结构如下:6 N' ^4 c5 {6 M7 P3 e% i- Y# X5 q n( z2 i
& V& U) x5 j4 E& M! V! G
! ]" w- W5 o1 a O0 g思路1:7 e0 e5 V) E' P8 r& M- z: I+ `% D3 P' \
使用assertsubnode命令插入两次子节点来完成标签表格中的一个单元格。4 S7 o$ y2 h- q8 \' l% }
& Y T& {8 Z0 T0 I6 M
- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签。
3 K; S1 g8 y7 s# ]( [ - //treenode labeltable=assertlabel(item,"order",DATATYPE_STRING);) x ^: I0 I* D# x
- //此处增加什么类型的标签都可以。即使是文本型标签,也可以在表格中存放数值型数据。6 R1 j! ^9 m" w* B$ G Y- ~+ E
- //表格中存放的数据类型与此无类,会在后面的在代码中定义。, X, j+ f. @$ ]9 ^9 V. A4 G
- ( x" i. n5 ?% ^1 H7 }) |0 [
- for (int i = 1; i <= 3; i++) {( P9 ^% h2 n5 q: u
- string labeltablerowname=concat("类型" , numtostring(i));' G3 P$ |& v# F
- treenode labeltablerow=assertsubnode(labeltable,labeltablerowname);//在标签中增加一行& f1 N F; K. K0 G
- //第二参数不能省略,所以必须为该行起一个名字。如果名字相同的话,只会插入一个的节点。
! _4 f1 k; F. D5 j - //第三参数可以省略。该行节点不存放具体数据,所以数据类型可以留空。$ J+ P* R2 e* N' s1 f
- treenode labeltablecell=assertsubnode(labeltablerow,"数量",DATATYPE_NUMBER);//在新增行中加入一列(一个存放数据的单元格)
' H7 j6 C# r: I1 f! a* e) H - //因为该节点要存放数值,所以数据类型要设置正确。
8 e5 S! q7 ?6 k. _+ _ - int num=duniform(0,5);. y+ i! W9 n% J6 A6 D1 W
- //setnodenum(labeltablecell,num);//为该数据单元赋值% F2 c- B/ }" F M1 _
- settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。$ `9 M: g r9 y
- }1 C1 }+ [, h7 N+ W4 m! ]
复制代码 思路2:5 p# J7 P0 E& J" ?! {
既然assertsubnode可以,那nodeinsertinto也行得通。
8 p4 S$ N; G+ ]" Y- |- treenode labeltable=nodeinsertinto(node(">labels", item));//在临时实体上增加一个标签,该标签没有名字
$ f4 I1 d9 m# a. l" E( [ - for (int i = 1; i <= 3; i++) {
+ H4 \8 x5 c" R) O! w1 ~3 v - treenode labeltablerow=nodeinsertinto(labeltable);//在标签中增加一行; {/ m4 _2 g1 Z. U- I+ R; [
- treenode labeltablecell=nodeinsertinto(labeltablerow);//在新增行中加入一列(一个存放数据的单元格)
) u/ C+ b9 s6 v* X5 Y7 y0 h/ r - nodeadddata(labeltablecell,DATATYPE_NUMBER);//指定该单元格节点的数据类型为数值型
: |9 v2 _" ] Q) |# c, o a - //虽然命令帮助中没有说明,但nodeinsertinto返回对新插入节点的引用。! q/ a7 h; n( @9 r# a; f
- int num=duniform(0,5);, |0 X8 D& F( ^# k, [. @
- //setnodenum(labeltablecell,num);//为该数据单元赋值
. D9 [0 ?+ s6 \ - settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。! w# {0 G* `+ s& a2 v. S
- }
复制代码 思路3:" d7 l9 ~. {/ E9 r' S2 C( d
既然标签中存放的是表格,那是不是可以使用表格相关命令呢?直接在节点上插入一张表格?
' h) U% u5 ~# J4 S+ Z- treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签. r0 b, [% g0 S: Y& b
- settablesize(labeltable,3,1,DATATYPE_NUMBER);
# ~0 j4 t4 v* { - for (int i = 1; i <= 3; i++) {
$ ?! t; f; @3 h, r8 D; T - settablenum(labeltable,i,1,duniform(0,5));; P9 z6 E/ s x; _, {
- }
复制代码
$ I+ Q. y) V: x3 m0 f/ { w* P R8 L; C/ A- M
2 \* c7 r$ y z6 @1 r4 ^
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|