好吧,我提出了某种 n00b 问题。我在这里浏览了网上和类似的问题,但没有找到任何针对这种简单(如我所想)问题的正确答案。
我有一个 DBGrid。我选择一行并对链接到该行的另一个数据进行一些操作。完成后,我的 DBGrid 被刷新并将选定的行重置为第一个。我想在刷新 DBGrid 数据之前选择相同的行。有什么建议么?
刷新前,将链接数据集的当前选择保存为书签,然后恢复书签。
这个答案旨在作为梅森的一个小补充,而不是替代方案。我添加它只是因为出现了另一个答案,错误地建议使用数据集的 RecNo 属性。并非所有 TDataSet 后代都可靠地或根本不实现 RecNo。一些后代只是返回一个常数值,例如当前行的 RecNo 为 0,并且在您为其赋值时什么也不做。
procedure TMyForm.DoSomethingWithDataSet(ADataSet : TDataSet);
var
Bookmark : TBookmark;
begin
Bookmark := ADataSet.GetBookmark; // Save your place in ADataSet
try
Screen.Cursor := crSqlWait; // Show the user that something is happening
Update; // update the form to make sure screen cursor updates
ADataSet.DisableControls;
// do something with ADataSet here e.g.
ADataSet.First;
while not ADataSet.Eof do begin
// do something with current row here, then
ADataSet.Next;
end;
finally
ADataSet.GotoBookmark(Bookmark); // Return to where you were at outset
ADataSet.FreeBookmark(Bookmark);
ADataSet.EnableControls;
Screen.Cursor := crDefault; // Let the user see you're done
end;
end;
RecKey:=DmFRM.ViewTBL.RecNo;
with DmFRM.ViewTBL do
begin
Active:=false;
Active:=True;
RecNo:=RecKey;
end;