開發自己的Excell控制元件 (轉)

a400發表於2007-08-16
開發自己的Excell控制元件 (轉)[@more@]

  對於員特別是從事資訊管理的程式設計師來說,報表列印是整個程式設計過程中最麻煩但又必須做的事情,我們常用的方法就是:
  一、將記錄匯出到l中;
  二、用CrystalReport或ActiveReport等報表工具生成報表然後再在程式中;
  三、直接列印窗體;

  對於第一種方法網上有許多文章介紹了怎樣將資料表記錄匯入到Excell中並怎樣Excell單元格式以便做出合適的報表,但是這種方法也有許多不便之處,一是的上必須Excell,這顯然不現實(當然的另當別論),二是Excell自帶的是控制元件,雖然仍支援ActiveX控制元件,但這與.Net的發展趨勢顯然是不相符的。
  對於第二種方法網上與CrystalReport或ActiveReport相關的資料很少,而且使用也相當複雜,怎麼製作報表全憑程式設計師自己摸索。
  對於第三種方法除非想證明自己是菜鳥,否則沒有人會使用。

  既然如此,我們可不可以利用.Net提供的強大功能自己開發類似於Excell的控制元件呢?其實要開發一個控制元件只要做兩件事,其一是定義各種屬性和方法,其二是根據各種屬性繪製控制元件介面。
  下面我們來分析一下Excell的結構,Excell呈現給我們的是一張二維結構的表格,每一行相當於資料表的一個記錄,每一列相當於資料表的欄位。但Excell的每個單元又有許多的格式控制元件單元的呈現方式,這就是Excell與別的表格控制元件如DataGrid不相同的地方,那麼如何實現每個單元都有不同的呈現方式呢?

  首先我們可以定義一個類名稱假設為DataCell,這個類定義了各種屬性比如:背景顏色、文字顏色、文字字型、對齊方式、文字折行、單元寬度、單元高度等等,然後我們定義一個Arraylist,名稱假設為DataRow,一個DataRow載入適當數量的DataCell物件,這個DataRow物件就相當於Excell的一行記錄。
  第二步我們再定義一個Arraylist物件,名稱假設為DataTable,每個DataTable又載入一定數量的DataRow,那麼這個DataTable物件其實就是一個有一定數量記錄的二維表格了,只是這個表格的單元都有不同的格式。
  第三步就是繪製控制元件介面了,在這一步我們可以利用Graphics的DrawString、DrawLine、DrawRectangle、強大功能,根據DataCell物件提供的不同格式任意繪製控制元件介面了。
  筆者根據上面的思路編制了一個類似於Excell的控制元件,雖然功能不如Excell強大,但對付一般的報表是足足有餘了,您不想試試嗎?
  主頁地址:
  地址::namespace prefix = o ns = "urn:schemas--com::office" />


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10790690/viewspace-961293/,如需轉載,請註明出處,否則將追究法律責任。

相關文章