assertlabel和setlabel可以新增标签。但是如果想要增加一个标签存放表格,该如何处理呢?在手册中没有发现相关的命令,于是自己想办法来解决了。仔细观察手工插入的三行一列的表格标签,发现其树结构如下:
思路1:
使用assertsubnode命令插入两次子节点来完成标签表格中的一个单元格。
[code]treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签。
//treenode labeltable=assertlabel(item,"order",DATATYPE_STRING);
//此处增加什么类型的标签都可以。即使是文本型标签,也可以在表格中存放数值型数据。
//表格中存放的数据类型与此无类,会在后面的在代码中定义。
for (int i = 1; i <= 3; i++) {
string labeltablerowname=concat("类型" , numtostring(i));
treenode labeltablerow=assertsubnode(labeltable,labeltablerowname);//在标签中增加一行
//第二参数不能省略,所以必须为该行起一个名字。如果名字相同的话,只会插入一个的节点。
//第三参数可以省略。该行节点不存放具体数据,所以数据类型可以留空。
treenode labeltablecell=assertsubnode(labeltablerow,"数量",DATATYPE_NUMBER);//在新增行中加入一列(一个存放数据的单元格)
//因为该节点要存放数值,所以数据类型要设置正确。
int num=duniform(0,5);
//setnodenum(labeltablecell,num);//为该数据单元赋值
settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。
}
[/code]思路2:
既然assertsubnode可以,那nodeinsertinto也行得通。
[code]treenode labeltable=nodeinsertinto(node(">labels", item));//在临时实体上增加一个标签,该标签没有名字
for (int i = 1; i <= 3; i++) {
treenode labeltablerow=nodeinsertinto(labeltable);//在标签中增加一行
treenode labeltablecell=nodeinsertinto(labeltablerow);//在新增行中加入一列(一个存放数据的单元格)
nodeadddata(labeltablecell,DATATYPE_NUMBER);//指定该单元格节点的数据类型为数值型
//虽然命令帮助中没有说明,但nodeinsertinto返回对新插入节点的引用。
int num=duniform(0,5);
//setnodenum(labeltablecell,num);//为该数据单元赋值
settablenum(labeltable,i,1,num);//也可以使用settablenum命令赋值。
}[/code]思路3:
既然标签中存放的是表格,那是不是可以使用表格相关命令呢?直接在节点上插入一张表格?
[code]treenode labeltable=assertlabel(item,"order",DATATYPE_NUMBER);//在临时实体上增加一个标签
settablesize(labeltable,3,1,DATATYPE_NUMBER);
for (int i = 1; i <= 3; i++) {
settablenum(labeltable,i,1,duniform(0,5));
}[/code]
|