使用disablecontrol

时间:2016-08-15 21:53:36

标签: delphi delphi-2010 fibplus

我在迭代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的替代方法都会有所帮助。

0 个答案:

没有答案