我實現了XAF項目中Excel數據的導入,使用Devexpress 新出的spreadsheet控件,可能也不新了吧:D
好,先看一下效果圖:下圖是Web版本的。
下面是win版:
功能說明:
支持從Excel任意版本導入數據,可以使用 打開文件功能選擇現有的文件,沒有模板時,請來到上圖界面中,另存為Excel到本地,往模板上填加數據。
導入時使用了顯示名稱進行匹配字段,所以字段部分不要修改。
導入時會使用你在寫好的驗證規則。
支持Win+Web兩個版本。
使用方法:
第一步:將Admiral.ImportData模塊拖到你的項目的模塊中去,上圖為例,我將把Admiral.ImportData拖到圖中A項目中,即MFBI.Module中去。
第二步:將Admiral.ImportData.Web 拖到B中。
第三步:將Admiral.ImportData.Win拖到C中。
你不知道模塊在哪里?請看下圖:
先打開solution 中的Module.cs, 然后從toolbox拖動ImportDataModule到Required Modules中。
當然這是把源碼直接放到項目中去的方法,如果想直接使用DLL,可以編譯好后,在toolbox中填加選擇項,選擇路徑后,再進行拖動。
再來看看代碼中的設置:
以下代碼中有兩處標紅的,第一必須實現IImportData接口才可能導入,這個接口是空的,不用實現。DomainComponent也可以這樣使用。
對于普通的字段,沒有其他設置。
對于引用型字段,需要[ImportDefaultFilterCriteria("編碼=?")]這樣,來設置將來查找引用類型的值時,用什么條件進行查找,當然問號會被替換為Excel中真實的值。
[XafDisplayName("銷量明細")] [NavigationItem("銷售模塊")] public class 銷量明細 : BaseObject,IImportData { public 銷量明細(Session s) : base(s) { } private 訂單 _訂單; [Association]
[ImportDefaultFilterCriteria("編碼=?")] public 訂單 訂單 { get { return _訂單; } set { SetPropertyValue("訂單", ref _訂單, value); } } ...... }
當前模塊還比較簡單 ,以后會慢慢完善。
20160128已經更新了支持win下面除了ribbon以外其他的界面類型。
2016-3-17 將源碼發布到github.
地址:https://github.com/tylike/Admiral.ImportData
修復了幾個小BUG。
增加了更新導入功能,在業務對象上面寫[UpdateImport("屬性名稱")],其中屬性名稱是指,在導入時,使用哪個屬性的值 Excel->庫中的 進行比較,來確定此對象是否存在。
增加了[ImportOptions(false)]屬性,可以寫在屬性或字段上面,設置為false時,即在導入時不顯示此字段。
增加給Winform增加了圖標。
導入完成后,在Excel中給出了提示信息,成功或不成功。
在查找引用屬性時,如果沒有使用ImportDefaultFilterCriteria屬性進行設置,則按如下優先級進行:
1.看主鍵是否是非自動生成的,是,則使用主鍵查找。
2.看引用類上面是否有[RuleUniqueValue]標記的屬性,有則使用。
3.看DefaultProperty是否有設置,有則使用。
2016-7-5日更新說明:
增加了FindObjectProviderAttribute,用于提升性能.
需要加速的類上面寫這個Attribute即可.
2016-7-14日更新說明:
Excel導入模塊增加了DC的支持,WEB下面可用。增加了Nullable類型的支持,并補全了數字類型的支持。
為了支持web下面新風格皮膚,增加了兩個變量:
這兩個變量可以在global.asax中進行設置:
1.ASPxSpreadsheetPropertyEditor.IsNewStyle = true; //如果使用了新風格時,需要設置此變量.
2.ASPxSpreadsheetPropertyEditor.SkinName="Aqua"; //由于Spreadsheet控件沒有支持新風格,所以這里可以可以手工指定另一個風格,否則顯示界面混亂
轉載請注明出處。多謝!
文章列表