我在迭代DataSet时使用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
不会将事件传递给DataSource,并且所有主要详细信息关系都会被破坏,直到{{1} } 叫做。
可能是我通过DataSource访问DataModule上的DataSet吗?我试过这个,但它并没有什么不同。
不使用EnableControls()
,速度无法使用。
因此,任何建议或以高速迭代大型DataSet的替代方法都会有所帮助。