国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

在Microsoft Office System中使用ADO.NET數據集(六)

2024-07-10 13:03:17
字體:
來源:轉載
供稿:網友
使用visual studio tools for the microsoft office system

到目前為止,例子都是使用標準的.net windows form應用程序來插入dataset對象中的數據到microsoft office 文檔中。這是一種針對microsoft office system中各種應用程序都非常有效的技術,不論基于每個應用程序的對象模型如何改變,整個處理過程都是相同的。本質上講,托管代碼可以運行office,是因為它加載了office對象模型到運行程序集的進程空間。然而,vba開發者習慣于他們編寫的代碼在文檔的后臺執行,并且文檔與vba代碼緊密相連。

這就是visual studio tools for office背后的部分目的。visual studio tools for office是一套新的visual studio .net項目模板,它利用pias和com interop(com互操作)來在excel和word文檔后臺運行托管代碼。在office文檔中不論是編寫還是調試vba代碼,網絡影響都是類似的。僅當使用visual studio tools for office時,visual studio .net 2003使得編寫和調試與文檔緊密相連的托管代碼可以在一個非常清晰的層次進行。

下一節介紹如何將數據填充到一個新建的word文檔中,整個文檔是從一個模板創建的。該文檔的示例代碼也包含一個visual studio tools for office項目,該項目插入數據到一個excel工作表,這與前面介紹的例子完全相似。實際上,這兩個項目都可以僅僅使用pias而不使用visual studio tools for office來實現。但是,visual studio tools for office使得在設計時和運行時連接托管代碼和office文檔變得更為容易。

使用dataset填充word2003模板

長期以來,office文檔中的書簽(bookmark)提供了一種便利的方式在word文檔中插入不連續數據片段。新建一個word 2003模板,以適當格式插入書簽,然后以編程方式訪問書簽集合以便插入數據,--這都很容易實現。

當你創建一個visual studio tools for office項目時,你可以選擇是新建word文檔還是excel文檔。在下面的例子中,項目向導創建了一個名為vstowordtemplate.dot的模板,如圖8所示。



圖8:一個 word 2003模板

請注意,圖8中,書簽的插人點是作為名字(name)和地址(address)的容器的。為了編碼方便,該文檔設計器將書簽的名字命名為與數據表中相應字段的相同的名字。

用于填充書簽的值的代碼非常短,它運行在thisdocument_new事件過程,當從該模板新建文檔時會觸發該事件。它先調用getdataset方法,以便創建dataset對象,簡化版的getdataset在本文前面就介紹了。這個版本僅僅使用customers表創建一個dataset。

private sub thisdocument_new() handles thisdocument.new

dim ds as dataset = getdataset()

然后,獲得文檔中書簽、相關表和六個數據行的引用。最后的代碼非常武斷,但是真實的應用程序應該包含某些機制,讓用戶可以選擇特定的用戶名來生成這個信封。

'fill in the document bookmarks

dim bookmarks as word.bookmarks = thisdocument.bookmarks

dim bookmark as word.bookmark

dim dt as datatable = ds.tables("customers")

dim dr as datarow = dt.rows(5)

最后,代碼遍歷書簽集合,用數據表中名字相同的字段的值替換各個書簽的文本。

for each bookmark in bookmarks

dim bookmarkname as string = bookmark.name

bookmark.range.text = dr(bookmarkname)

next

end sub

圖9 顯示運行這個過程的結果



圖9 使用dataset中的數據填充書簽文本,運行結果

關于內存管理

在.net中與基于com的office對象模型交互時, com對象的釋放(disposal)和內存管理需要特別注意。當使用.net編寫office解決方案時,你擁有一個.net客戶端通過運行時可調用包裝(runtime-callable wrapper ,rcw)與com通信。rcw是在運行時由crl根據interop程序集中的元數據信息動態創建的代理。,對于.net客戶端,rcw表現的像任何其他clr對象,但是rcw實際上扮演了一個代理的角色,它負責在.net客戶端和com對象之間封送(marshalling)調用。這種關系的副作用就是com世界確定的對象生存期管理與.net世界的非確定的垃圾回收之間不匹配。這種不匹配可能導致對象沒有從內存釋放、應用程序掛起,或者其他無法預料的行為。

使兩者和諧的一種主要的方法就是為你已實例化的每個com對象調用marshal.releasecomobject方法。marshal.releasecomobject方法規定com對象必須確定的釋放,調用它后你就可以確信內存中不再有剩下的沒有被使用的對象了。

最大的網站源碼資源下載站,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 明溪县| 连云港市| 惠水县| 景泰县| 来安县| 嘉兴市| 临颍县| 余干县| 侯马市| 庄浪县| 泽库县| 营口市| 盐山县| 峨边| 延寿县| 平顺县| 太仆寺旗| 阿尔山市| 山东省| 汕尾市| 深圳市| 建阳市| 丰原市| 新昌县| 渭南市| 通化县| 老河口市| 白银市| 绵竹市| 安新县| 海门市| 南投市| 会昌县| 江都市| 永丰县| 河池市| 河北省| 英吉沙县| 卓尼县| 湟中县| 盐池县|