在cxGrid

时间:2018-10-25 17:48:50

标签: delphi grid row refresh

我已经看到,如果以另一种形式(也包括DataSet)更改数据,或者即使在服务器端(在触发器中或从另一个用户)更改了数据,也仅刷新当前行是一个问题。 因此,我找到了部分可与DevExpress的cxGrid配合使用的解决方案,并且存在以下问题。

  frm:=TfrmEdb01.Create(Self);    // create edit-form
  try
    frm.LoadData(0);              // do the insert in TAdQuery
    frm.ShowModal;                // Show edit form

    // after closing an Edit-Form, make a new record in cxGrid
    row:=tv01.dataController.InsertRecord(tv01.Controller.FocusedRecordIndex);

    // for each column in grid...
    for col:=0 to tv01.DataController.ItemCount-1 do
    begin
      // ...get its FieldName
      sFld:=tv01.DataController.GetItemFieldName(col);
      // and if this field exist in edit-form's Query
      if frm.q01.FindField(sFld)<>nil then
      //then assign this value to the newly created row in the grid.
        tv01.DataController.Values[row,col]:=frm.q01.FieldByName(sFld).Value;
    end;
  finally
    frm.Free;
  end;

确实,当我退出编辑表单时,在cxGrid中创建了一个新行。问题在于: -如果双击(再次打开编辑表单),则会打开前一个记录。在我看来,数据没有在Query对象中更新,仅在GridView中更新了……也许我应该使用Grid中的值而不是Query对象。 -如果选择另一条记录(上下滚动),然后再次选择此新记录,则根本无法聚焦。仅当我重新加载整个dataSet时,才能与其他任何记录一样选择该新记录。

干杯!

p.s。为了解决问题,我将提供整个测试项目。还有用于在数据库中创建表的SQL脚本,并且必须将AnyDac连接设置为“您的数据库”。 还有一张图片会/应该说明问题。

Issue ilustration

1 个答案:

答案 0 :(得分:0)

您有电话亭,将更改保存到基础数据集。在finally之前执行此操作。

tv01.DataController.Post();

有关更多详细信息,请参见TcxCustomDataController.Post的帮助。