【问题标题】:Refresh one row in cxGrid刷新 cxGrid 中的一行
【发布时间】:2018-10-25 17:48:50
【问题描述】:

我已经看到,如果数据以另一种形式(以及 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 对象。 - 如果选择另一条记录(上下滚动),然后想再次选择这条新记录,则根本无法聚焦。只有当我重新加载整个数据集时,才能像选择其他记录一样选择这条新记录。

干杯!

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

【问题讨论】:

  • 您是否尝试(暂时)将 TDBNavigator 添加到与您的 cxGrid 相同的表单中?这应该会向您显示数据集处于什么状态,这可能与您认为的不同。
  • 网格底部有一个导航器,但是执行完这个for循环后什么都没有改变。但是,最大的问题是为什么这个新记录根本不能被选中。
  • 好吧,在我看来,您可能会以错误的方式解决这个问题 - 我不会尝试将值复制到网格的数据控制器中,而是在数据控制器的数据集中创建一条新记录,然后把它留给网格去做它应该做的事情,即显示东西而不是复制数据。试图在 cxGrid in 中操作数据几乎总是错误的做法 - 而是操作数据集的数据。
  • 我可能不会也不能在实时数据集 (TAdQuery) 上执行插入操作。也许如果使用 TClientDataSet,那么可以在运行时手动添加记录。但事实并非如此。
  • 在我看来,您正在与您正在使用的 TDataset-descendant 中的状态机进行斗争。当您尝试使用 db-aware 组件(如 cxGrid DBTableView)来操作数据时,就会发生这种情况。

标签: delphi grid row refresh


【解决方案1】:

您已调用 post 以保存对基础数据集的更改。在finally 之前执行此操作。

tv01.DataController.Post();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多