根据项目需要,最近在做一个关于owc透视表的功能(PivotTable),这个东西啊让我可是郁闷了将近10天,网上很多资源都是直接连接数据源的方式,但对于实现系统开发来说,不实用,因为b/s系统多数是分层架构,并且部署实施时,很难由客户端直接向数据库服务器发出请求。原因就不多说了。
确定的解决方案是:
1.数据库后台组织数据和透视表展现样式
2.通过action将数据发到前端。
3.在前台通过ADODB.Recordset,msxml2.domdocument这两个对象加载数据
下面给出xml文件格式(这可是我在目前网上没找到的哦,也是最初困惑我的一方面)
 1 < xml  xmlns:s ='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882'
 2      xmlns:dt ='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882'
 3      xmlns:rs ='urn:schemas-microsoft-com:rowset'
 4      xmlns:z ='#RowsetSchema'>
 5 <s:Schema id ='RowsetSchema'>
 6 <s:ElementType name ='row'  content ='eltOnly'  rs:CommandTimeout ='30'>
 7 <s:AttributeType name ='name'  rs:number ='1'  rs:writeunknown ='true'>
 8 <s:datatype dt:type ='string'  dt:maxLength ='100'  rs:maybenull ='true'/>
 9 </s:AttributeType >
10 < s:AttributeType  name ='class'  rs:number ='2'  rs:writeunknown ='true'>
11 <s:datatype dt:type ='string'  dt:maxLength ='100'  rs:maybenull ='true'/>
12 </s:AttributeType >
13 < s:AttributeType  name ='score'  rs:number ='3'  rs:writeunknown ='true'>
14 <s:datatype dt:type ='int'  dt:maxLength ='100'  rs:maybenull ='true'/>
15 </s:AttributeType >
16 < s:extends  type ='rs:rowbase'/>
17 </s:ElementType >
18 </ s:Schema >
19 < rs:data >
20 < z:row  name ='hill'  class ='1'  score ='10'  />
21 < z:row  name ='hill'  class ='2'  score ='20'  />
22 < z:row  name ='zuo'  class ='1'  score ='30'  />
23 < z:row  name ='zuo'  class ='2'  score ='40'  />
24 </ rs:data >
25 </ xml >
这个xml只是一个小例子,可以按照这样的格式由程序动态生成,或是在数据库端以函数形式组织(这个方面好,尤其是数据量大且复杂的情况)
下面给出如何加载数据:
 1  //声明RecordSet对象
 2         var adors = new ActiveXObject("ADODB.Recordset");
 3         //alert(adors);
 4         //声明XMLDocument对象
 5         //TODO:msxml2.domdocument有可能是msxml3.domdocument或msxml4.domdocument,有待证明
 6         var xmldoc = new ActiveXObject("msxml2.domdocument");
 7         //alert(xmldoc);
 8         //服务器端返回的XML字符串,用来构造RecordSet
 9         var str=" <% = xml %> ";
10         
11         //XMLDocument对象加载XML字符串
12         xmldoc.loadXML(str);
13         
14         //RecordSet设定数据源为上面的XMLDocument对象,并打开
15         adors.Open(xmldoc);
16         
17         pvt = document.PivotTable1;
18         
19         pvtconstants = pvt.Constants;
20         //设定透视表的数据源为上面的RecordSet对象
21         pvt.DataSource = adors;
其中的xml变更为从action发到前台的xml数据
基本上这样就可以应用了。有不同观点的,愿意和你们一起交流

开心过好每一天。。。。。