我們先來簡單了解一下WinForm和FarPoint,WinForm是·Net開發平台中對Windows Form的一種稱謂。而FarPoint是一款模擬EXCEL的控件。它可以根據用戶的要求實現很大部份的EXCEL操作,且包括多個子表、表格風格定義、公式計算、排序、分組等等都可以實現。本文主要是介紹利用FarPoint Spread表格控件來構造Winform的Excel表格界面輸入。
在Winform界面中以類似Excel表格界面中錄入相關的數據,其中界面需要錄入圖片信息,基礎信息,列表信息等,綜合這些后界面的效果就如下面這樣。而本文主要針對如何利用FarPoint Spread表格控件實現類似Excel界面豐富數據的保存及顯示,以及希望在使用過程中的一些經驗對大家在開發Winform的Excel數據錄入和顯示方面的開發有一定幫助。

根據上面的界面分類能夠看到,這個界面大概能怪划分的數據類型分別是基礎字段數據、多行的列表數據、圖片數據和備注信息的顯示錄入。那么下面我們根據分類介紹如何實現這些功能。
1、類似Excel的列表總體界面設計
首先,在這個列表中需要在Winform的界面中進行設計拖入一個Farpoint控件到Winform界面上后,然后設置好布局等屬性,接着在右鍵菜單上啟動Spread Designer,這樣就可以設計相關的Excel樣式表格的內容了。

注意:一般情況下,這個界面是在窗體中設計的,當然你的內容可以通過拷貝的方式復制過來,從Excel文檔中復制粘貼過來,如果從效果上來看是一樣的。不過,雖然Farpoint Spread控件提供了一個另存為Xml文件的操作,並且可以通過API,Open一個XML文件,不過Open的XML文件后,好像內容不能進行修改的,而且類型CellType也是Null(空值)的,所以如果要在一個窗體上動態加載布局是沒辦法實現的。不過對於開發來說,我們在設計時就把Excel樣式的列表界面設計好,這也是一個不錯的選擇。

2、下拉列表的綁定
大多數情況下我們為了輸入的便利性,我們會選擇在Excel列表中通過下拉列表方式輸入內容,如此便可以提高速度和用戶體驗,但這些內容必須是通過數據庫內容進行綁定的,Farpoint Spread控件通過輸入很多的內容且包括ComoBox類型數據來綁定下拉列表的數據。如下所示。

當我們下拉類型被指定后,Excel列表的顯示方式隨之變化,比如像下面一樣來顯示。

上面打上對勾的就我們下一步需要綁定列表數據的列表了,綁定列表的數據也不麻煩,但是需要明確Cell的序號,綁定給他數據源就可以了,可實際上的話,經常要數着Cell的行列號上的數字是非常費心神且很不方便。

對於BindDictItems代碼,我使用了擴展方法,所以這個我們是能通過對象直接調用,具體的函數代碼如下所示,這個就是調用字典業務類獲取數據,但是需要給Items屬性賦值,注意其中的Edittable最好選擇為true,否則它只會類似於DropdownList那樣只顯示里面列表的內容。

3、如何構造界面自定義錄入
為了能夠很方便的輸入內容,在對於一些例如彈出框選擇內容,圖片編輯,備注內容(很長的時候)的編輯來說,我們通常是通過自定義界面來錄入比較好,比較Excel樣式的界面,錄入單元格很小,有時候也實現不了的。所以通過制定控件單元格的單擊事件,用來處理特殊錄入信息的操作。

下面是展開界面部分內容給大家看看,如下面所示:

例如,對於下拉列表內容,我們需要進行彈出式選擇內容,如下界面所示。

對於圖片單元格,我們單擊就可以彈出下面的窗體才能夠很方便編輯或者查看。

對於備注內容,我們讓他彈出一個窗體,更好展現和編輯。

4、數據的顯示和保存
在顯示普通的主表數據字段這方面是非常的簡單的,就是把內容賦值給對應的單元格Text屬性即可,如下所示。

當我們需要保存的時候,就是把對應的內容保存到實體類進行數據保存操作即可。
但是在數據比較多的時候,我們需要把內容保存分開,各個函數負責不同的部分即可,在主表保存后繼續保存其他部分的內容,例如紅色部分就是其他部分的保存操作。

例如工藝過程是一個列表數據,我們在保存的時候是需要指定行列的屬性進行操作,而且我們添加一個Seq的序列號,這樣是用來保存內容的順序,這樣加載的時候,我們就按照這個循序進行加載顯示,否則會出現問題。
其中GetProcess函數,這個就是一個列表中查找對應順序的內容,如果有,那么我們需要更新這個對應順序的內容,否則我們認為它是新的數據,這樣就新增到數據庫中,所以最后用了InserUpdate就是這個道理。其中GetProcess函數邏輯代碼如下所示。
另外有一點是需要注意的是有些單元格是合並列的,所以它的行列號一定要注意,因為有些地方可能需要跳行。

5、Excel表格的數據打印及導出。
對於使用Farpoint Spread的空間,我們能夠非常方便地對里面的內容進行打印或者導出Excel,重要的是代碼不繁瑣,如下所示。


我們導出的效果和界面顯示的效果基本上一致的,而且圖片等特殊的格式,也是正常保留在Excel里面,從感覺上來說是非常的不錯的。
那么在最后我們附上這個系統的一些截圖作為補充了解。
到這里,我們基本上是介紹完了利用FarPoint Spread表格控件來構造Winform的Excel表格界面輸入的內容了,在上文我們通過了五個部分來介紹的,一是類似Excel的列表總體界面設計的基本內容,二是下拉列表的綁定,三是如何構造界面自定義錄入,四是數據的顯示和保存,五是Excel表格的數據打印及導出。