我正在将用Delphi 2010编写的win32 Delphi VCL应用程序迁移到多层体系结构。
该应用程序通过devexpress广泛使用ExpressGrids(TcxGrid)进行数据绑定。
这一切正常,Delphi客户端成功与WCF服务通信,以交换数据传输对象。
问题是,如何维护数据绑定功能? 我倾向于编写一个返回通用数据表或数据集的服务方法。我可以将linq语句结果转换为数据集,表或视图吗? 我不确定我可以将Expressgrids绑定到对象数组(WCF返回实体集合,但Delphi看到数组)。有没有人有这种互操作性的经验?
修改
我有数据服务返回DataSet,但猜猜是什么?来自.net的xml数据集与Delphi(至少2010年)不兼容。我已经设法使用Gekko example (modified)来使用它,但由于我们需要从客户端运行的查询的复杂性,它不会实用。我们现在的选择是将网格保留原样直到BLL完成并启动一个新项目以在C#中重新编写客户端(作为web或Windows应用程序),或者使用RemObjects Hydra编写一个通用的Grid插件,嵌入带有网格的表格 - 试图现在解决这个问题。
更新 我已经放弃了Gekko DataSet实现,转而通过研究Delphi中TClientDataSet所需的xml格式来编写自己的实现。在服务器端,我实现了一个服务,它以字节数组的形式返回符合TClientDataSet的xml。在客户端上,我将其加载到TStringStream中,然后将流加载到TclientDataSet组件中。我将这个用于小型集合,以便在我们推出Hydra解决方案时提供查找和数据绑定。
xml大致遵循以下格式:
"2.0">
<METADATA>
<FIELDS>
<FIELD attrname="ID" fieldtype="i4"/>
<FIELD attrname="Status" fieldtype="string" WIDTH="10"/>
<FIELD attrname="Created" fieldtype="date"/>
<ROWDATA>
<ROW RowState="4" ID="1" Status="Code1" Created="20130707" Made="20130707T21:37:55341" Stopped="00:00:00000" Volume="1174" IsReady="TRUE"/>
<ROW RowState="4" ID="2" Status="Code2" Created="20130707" Made="20130707T21:37:55341" Stopped="00:00:00000" Volume="2149" IsReady="FALSE"/>
This是关于xml格式的少数信息来源之一。
我知道问题已经过时了,但我很感激有关互操作性和遗留代码迁移的任何见解。
由于