我正在使用标准的数据感知组件和dbExpress在Delphi 6 + MySQL数据库中制作一个应用程序。该应用程序允许用户查看网格中的记录并在客户端编辑数据(插入和/或删除记录)。这些数据编辑仅在单击提交按钮后才写入数据库。所有这些工作正常,并具有以下设置:

控制项:
1. DBGrid1链接到DataSource1以可视地显示数据。
2. DataSource1链接到ClientDataSet1,以提供数据供DBGrid显示。
3. ClientDataSet1链接到DataSetProvider1,以提供客户端数据进行编辑。
4. DataSetProvider1链接到SQLDataSet1,该SQLDataSet1从单个DB表中选择记录。
5. SQLDataSet1链接到SQLConnection以提供与MySQL数据库的连接。

动作:
1.用户插入一条记录:我使用ClientDataSet1.InsertRecord;
2.用户删除一条记录:我使用ClientDataSet.Delete;
3.用户提交数据:我使用ClientDataSet1.ApplyUpdates(-1);

在处理数据和发布数据方面(包括对DataSetProvider1BeforeUpdateRecord的小技巧以删除记录),这一切都非常有用。

现在针对我的问题:
当用户第一次加载表单时,DBGrid1显示所有原始记录,删除所有已删除的记录。但是,当用户在ClientDataSet1中插入新记录时,DBGrid1中将显示空白记录。当您使用ClientDataSet1.ApplyUpdates时,实际数据不会丢失或设置为NULLS,此记录已正确写入数据库。

我知道TClientDataSet具有用于原始数据的数据属性和用于已编辑数据的Delta属性。可以同时将这两个带有数据的属性显示在单个DBGrid中并仍然允许用户编辑数据吗?

我查看了30多个资源和演示应用程序,都避免了此问题。能做到吗?

最佳答案

好的...这个问题已被观量很多,没有太多反馈。我通过下载许多教程,演示应用程序进行了一些研究,并阅读了多篇有关使用这些控件的文章/帮助信息。

最终结果:


这些控件通常有点bug。
在具体提到我的问题时,可以肯定地说控件无法完成我所描述的标准。


这是基于我回顾的30多个演示应用程序,文章和教程得出的,它们都没有描述在单个数据网格中同时显示原始数据和Delta数据。当然,您可以使用Listbox或StringGrid破解此结果(这是我所做的),但这也表明控件不能或不能用于提供此功能(可能性很小)。

在我看来,此功能是一个明显的疏忽,因为用户希望在单个数据网格中方便地查看其动作的潜在结果,而开发人员希望以简单且轻松的方式(即使用数据网格来显示数据)提供该功能!

回答的问题[如果您可以通过我想查看的演示应用程序证明与众不同,则将其删除]。

如果您创建了演示应用程序但无法正常运行,请投票赞成我的答案。谢谢

关于delphi - 在Delphi中使用ClientDataSet,是否可以在DBGrid中同时显示数据和增量记录?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4069846/

10-11 07:09
查看更多