我Disable/EnableControls()
在迭代数据集时遇到了一些问题,即更新字段时。
两个更新的字段似乎发生了什么,它们都在使用相同的数据。看起来正在为所有行输入帖子的最后一个值。因此,假设我们有 3 条记录,它们更新了 1、2 和 3 的值(在我的情况下,所有字段都发布了 3),而我期望最后一个字段是 1、2 和 3。
例如,我的数据集中有 10 条记录。我运行这个函数,在查看网格和持久化数据时Cost
,每一行的列值都是相同的,即使我已经逐步检查了getNewDataValue
函数,它们是不同的值。
NumberSelected = 0;
dataSourceItems.DataSet.DisableControls; //it this be my problem, accessing the dataset via the datasource? – I tried this and it didn’t make a difference.
while (NumberSelected < cxGridDBTableView1.Controller.SelectedRowCount) do
begin
Id = cxGridDBTableView1.Controller.SelectedRows[NoSelected]).Values[0];
if dataSourceItems.DataSet.locate('PK', Id, []) then
begin
dataSourceItems.DataSet.edit;
dataSourceItems.DataSet.fieldbyname('Cost').asfloat := getNewDataValue;
dataSourceItems.DataSet.Post;
inc(NumberSelected)
end;
dataSourceItems.DataSet.EnableControls;
end;
我正在使用 Delphi 2010、DevExpress Quantum Grid 和 FIBPlus 数据集,访问 Firebird 数据库。
查看文档,我可以看到当DisableControls()
被调用时,TDataSet.DataEvent
不会将事件传递给数据源,并且所有主从关系都被破坏,直到EnableControls()
被调用。会不会是我通过 DataSource 访问 DataModule 上的 DataSet?我已经尝试过了,它没有任何区别。
不使用Disable/EnableControls()
,速度无法使用。因此,任何建议或快速迭代大型 DataSet 的替代方法都会有所帮助。