根據(jù)項(xiàng)目需要,最近在做一個(gè)關(guān)于owc透視表的功能(PivotTable),這個(gè)東西啊讓我可是郁悶了將近10天,網(wǎng)上很多資源都是直接連接數(shù)據(jù)源的方式,但對(duì)于實(shí)現(xiàn)系統(tǒng)開(kāi)發(fā)來(lái)說(shuō),不實(shí)用,因?yàn)閎/s系統(tǒng)多數(shù)是分層架構(gòu),并且部署實(shí)施時(shí),很難由客戶端直接向數(shù)據(jù)庫(kù)服務(wù)器發(fā)出請(qǐng)求。原因就不多說(shuō)了。
確定的解決方案是:
1.數(shù)據(jù)庫(kù)后臺(tái)組織數(shù)據(jù)和透視表展現(xiàn)樣式
2.通過(guò)action將數(shù)據(jù)發(fā)到前端。
3.在前臺(tái)通過(guò)ADODB.Recordset,msxml2.domdocument這兩個(gè)對(duì)象加載數(shù)據(jù)
下面給出xml文件格式(這可是我在目前網(wǎng)上沒(méi)找到的哦,也是最初困惑我的一方面)
 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>
這個(gè)xml只是一個(gè)小例子,可以按照這樣的格式由程序動(dòng)態(tài)生成,或是在數(shù)據(jù)庫(kù)端以函數(shù)形式組織(這個(gè)方面好,尤其是數(shù)據(jù)量大且復(fù)雜的情況)
下面給出如何加載數(shù)據(jù):
 1 //聲明RecordSet對(duì)象
 2        var adors = new ActiveXObject("ADODB.Recordset");
 3        //alert(adors);
 4        //聲明XMLDocument對(duì)象
 5        //TODO:msxml2.domdocument有可能是msxml3.domdocument或msxml4.domdocument,有待證明
 6        var xmldoc = new ActiveXObject("msxml2.domdocument");
 7        //alert(xmldoc);
 8        //服務(wù)器端返回的XML字符串,用來(lái)構(gòu)造RecordSet
 9        var str="<%=xml%>";
10        
11        //XMLDocument對(duì)象加載XML字符串
12        xmldoc.loadXML(str);
13        
14        //RecordSet設(shè)定數(shù)據(jù)源為上面的XMLDocument對(duì)象,并打開(kāi)
15        adors.Open(xmldoc);
16        
17        pvt = document.PivotTable1;
18        
19        pvtconstants = pvt.Constants;
20        //設(shè)定透視表的數(shù)據(jù)源為上面的RecordSet對(duì)象
21        pvt.DataSource = adors;
其中的xml變更為從action發(fā)到前臺(tái)的xml數(shù)據(jù)
基本上這樣就可以應(yīng)用了。有不同觀點(diǎn)的,愿意和你們一起交流

開(kāi)心過(guò)好每一天。。。。。