随筆背景:在很多時候,很多入門不久的朋友都會問我:我是從其他語言轉到C#開發的,有沒有一些基礎性的資料給我們學習學習呢,你的架構感覺一下太大了,希望有個循序漸進的教程或者視訊來學習就好了。
其實也許我們每天面對的太多東西了,覺得很多都稀松平常了,即使很細微的地方,可能我們都已經形成習慣了。反過來,如果我們切換到其他領域,如IOS、android,那麼開始我們可能對裡面很多設計的規則不甚了解,開始可能也是一頭霧水。
上篇随筆我們介紹到自動代碼生成的界面如下所示,具備了導入、導出操作,這個操作是針對Excel進行的。

下面我們來介紹這個在很多子產品裡面常見的Excel導入、Excel導出操作是如何實作的。
由于我為了示範的目的,我在客戶資訊表裡面隻是設計了幾個代表性的字段,下面我們來看看代碼生成工具自動生成的界面背景代碼是如何的。
上面的代碼中,FileDialogHelper.SaveExcel 函數是調用公用類庫子產品,彈出一個選擇儲存檔案的對話框,如果你沒有這個類,你可以自己添加代碼實作這個操作(這就是公用類庫的好處,在使用的時候能夠快速調用,減少代碼,提高效率)。
然後根據客戶錄入的條件檢索需要的資料内容:string where = GetConditionSql();
接着就是建構一個相關字段的表格對象:DataTableHelper.CreateTable,這裡面也是使用公用類庫來友善建立各種字段的表格,預設字段為字元串格式,如果需要如整形格式的,可以通過|進行分割,如“序号|int” 。
建立DataTable對象後,我們周遊對象集合,把它裡面的資料一行行的指派給DataRow對象就可以了。
指派後,就是需要把DataTable對象轉換為Excel的操作過程了,這裡操作分為兩步,第一是建立Excel文檔,第二個是寫資料的表頭和資料行資訊,也就是資料的寫入操作,這裡面我們把它封裝在公用類庫裡面,友善子產品之間的調用。
導出Excel子產品采用了基于Aspose.Cell的元件進行資料的寫入操作:AsposeExcelTools.DataTableToExcel2
導出完成後,我們提示使用者是否打開Excel檔案。
最終,完成功能後,我們運作程式,導出Excel資料的效果如下所示。
相對于資料的導出操作,Excel資料的導入操作會稍微麻煩一點,你至少需要選擇一個檔案,檔案最好以固定的模闆進行導入,是以為了讓使用者确認資料的有效性,我們最好能提供了一個把Excel資料顯示出來再确認導入的過程,這樣可以減少導入錯誤資料的可能。
我們知道,這種常見的導入操作,很多業務子產品可能都需要,是以有必要考慮把它抽象出來,作為一個通用的導入子產品,這樣我們可以多次利用,非常友善,是以我們提煉這個通用導入的子產品特性如下所示。
Excel資料的導入子產品,預設生成界面的時候,也已經一并生成了,我們來看看其中的代碼。
其中FrmImportExcelData 是一個界面基礎子產品中定義的一個通用導入子產品,裡面實作了一些如顯示Excel資料,模闆資訊關聯,儲存資料的接口等操作。我們來看看它的程式運作的效果。
其中我們通過代碼 dlg.SetTemplate 指定模闆就是用來關聯Excel模闆資訊的,我們讓可以盡可能的選擇正确的模闆進行錄入資料。
使用者通過第2的辨別,指定要導入的Excel資料檔案,選擇檔案後,資料會自動顯示出來友善确認。
但我們選擇儲存資料的操作的時候,這個通用子產品會執行儲存的邏輯代碼,并調用由建立者實作的代碼邏輯,如上面代碼的dlg.OnDataSave就是在執行儲存的時候,執行的代碼邏輯,我們來看看生成的一些代碼實作。
我們知道,導入的時候,是周遊每行Excel進行資料儲存操作的,是以我們這裡給出了一個一行的操作代碼即可:bool ExcelData_OnDataSave(DataRow dr),裡面的邏輯,在資料儲存的時候會被子產品進行調用。
上面的操作,是一條條的進行操作,如果累計超過3條記錄出錯,子產品提示是否繼續還是退出。
最後,我們的Excel資料導入完成後,為了及時更新主界面的資料,我們也定義了一個事件作為回調,如下所示。
這個事件的實作代碼就是在主界面的資料綁定更新。
循序漸進開發WInform項目--系列文章導引: