1

我正在编写一个网格控件,它将显示 TDataSet 或 TObjectList 的内容。当你只需要支持 TDataSet 时,事情就很简单了:

  1. 通过 TDataLink 后代链接到数据集。
  2. 在绘制网格的内容时,您可以使用缓冲在该 TDataLink 中的记录来绘制您需要的内容。
  3. 不需要在某处有单独的对象来表示 TDataSet 中的行,因为您总是只在缓冲区中绘制行。

在我的例子中,我还需要接受来自其他几个来源的数据,这意味着我需要一个代表每一行的对象(也因为控件需要相当多的行状态)。

但这会导致上述模型出现问题。因为我有一个代表每一行的对象,所以需要在从 TDataSet 添加或删除记录时通知我。我只是看不出该怎么做。

显然,我不想挂在数据集事件上;它们可能已经在使用中,并且 TDataLink 旨在成为我的控件和数据集之间的中介。我尝试使用 DataEvent 虚拟方法失败了,因为它根本不会告诉您是否正在添加/删除记录。

有任何想法吗?

4

2 回答 2

1

如果您将您的 TDataLink 后代挂钩到连接到 TDataSet 的 TDataSource,您会在数据更改时在 RecordChanged 过程中获得调用。

您可以使用连接到 TDataSet 的 TDataSource 的事件 OnDataChange 和 OnUpdateData。

于 2011-01-11T10:39:08.307 回答
0

看来,您必须从要使用的基本数据集类派生出自己的类。在那里,您将需要覆盖 InternalAddRecord、InternalPost、InternalDelete 方法并处理记录添加/删除。

于 2011-01-11T09:32:03.343 回答