DevExpress的XAF 框架通常使用 GridControl 控件来操作数据库表中的数据,但导入导出、非结构化数据的管理可以使用SpreadSheet 控件。
SpreadSheet 控件模拟微软的 EXCEL 电子表格,对手工干预比较多的数据是一种很好的方式。下面总结一下如何组合应用:
一、利用 SpreadSheet 控件 来导入 EXCEL 格式的数据。
通常的做法是通过 EXCEL 的接口,读取 EXCEL 文件,获取数据,然后写入数据库记录。本人采用一种更直观的方式。
1)在 XAF 中创建一个 用户控件,引用 SpreadSheet 提供的 SpreadsheetControl 控件;
2)加入 SpreadsheetControl 提供的 操作动作控件 (比如打开文件、保存等)。
3)在模型设计器中创建一个 XAF 的 DashboardView,加入一个 ControlDetailItem,并将 其ControlTypeName 属性的值设置为:上述创建的用户控件。然后,增加其它设置。。。
4)在需要导入EXCEL 的对象界面,创建一个 ViewController (可以限用于 List 界面),增加一个PopupWindowShowAction 。
A\ 自行定义 CustomizePopupWindowParams 事件,用方法 CreatDashbardView 创建 一个 DashbardView,用于弹出。
弹出窗口中,包含了 EXCEL 样式的 SpreadsheetControl 控件,可以打开 XLS,XLSX 等格式的文件。
B\ XXXAction_Excute 事件,用于数据的导入。
二、 利用 SpreadSheet 控件来管理 非结构化数据。
1)自定义控件与 VIEW 的过程同上(一);
2)但数据保存于数据库记录的一个字段中,使用于XAF 的附件扩展;
3)从此字段加载数据,使用控件的方法:SpreadsheetControl.LoadDocument ,有两个参考:
bool LoadDocument(Stream stream, DocumentFormat format) bool LoadDocument(Byte[] buffer) 后者自动探测文档格式。
bool LoadDocument(Byte[] buffer, DocumentFormat format) bool LoadDocument(Stream stream) 后者自动探测文档格式。
4) 保存文档的方法 参考此文 How to: Save a Document to a File ,下列方法可以使用。
void SaveDocument(Stream stream, DocumentFormat format)
Byte[] SaveDocument(DocumentFormat format)
5) SpreadsheetControl 如何与数据库交互, 参考 此文: How to: Store a Workbook in the Database