加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi – 在DBGrid中恢复实际行

发布时间:2020-12-15 10:12:23 所属栏目:大数据 来源:网络整理
导读:D6教授. 以前我们使用DBISAM和DBISAMTable.处理RecNo,它可以很好地修改(删除,编辑等). 现在我们替换为不处理RecNo的ElevateDB,很多时候我们使用Queries而不是Tables. 查询必须重新打开以查看修改. 但是如果我们重新打开查询,我们需要重新定位到最后一条记录.
D6教授.

以前我们使用DBISAM和DBISAMTable.处理RecNo,它可以很好地修改(删除,编辑等).

现在我们替换为不处理RecNo的ElevateDB,很多时候我们使用Queries而不是Tables.

查询必须重新打开以查看修改.

但是如果我们重新打开查询,我们需要重新定位到最后一条记录.
定位是不够的,因为Grid在另一行中显示它.
这是非常令人不安的事情,因为在修改记录进入另一行之后,你很难遵循它,并且用户讨厌这个.

我们发现此代码:

function TBaseDBGrid.GetActRow: integer;
begin
 Result := -1 + Row;
end;


procedure TBasepDBGrid.SetActRow(aRow: integer);
var
 bm : TBookMark;
begin
 if IsDataSourceValid(DataSource) then with DataSource.DataSet do begin
  bm := GetBookmark;
  DisableControls;
  try
   MoveBy(-aRow);
   MoveBy(aRow);
   //GotoBookmark(bm);
  finally
   FreebookMark(bm);
   EnableControls;
  end;
 end;
end;

最初的例子是使用moveby.这与Queries工作正常,因为我们无法看到Query在后台重新打开,视觉控件不会改变行位置.

但是当我们有EDBTable或Live / Sensitive Query时,MoveBy使用起来很危险,因为如果有人删除或追加新行,我们可以重新定位到错误的记录中.

然后我尝试使用BookMark(见注释).但是这种技术不起作用,因为它在另一个Row位置显示记录……

那么问题:如何在DBGrid中强制行位置和记录?

或者,在基础DataSet刷新后,哪种DBGrid可以重定位到记录/行?

我搜索用户友好的解决方案,我理解他们,因为我试图使用这个跳过DBGrid,并且使用非常糟糕,因为我的眼睛在更新后试图找到原始记录时出现…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读