根据项目需要,最近在做一个关于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数据
基本上这样就可以应用了。有不同观点的,愿意和你们一起交流

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