5

好吧,我提出了某种 n00b 问题。我在这里浏览了网上和类似的问题,但没有找到任何针对这种简单(如我所想)问题的正确答案。

我有一个 DBGrid。我选择一行并对链接到该行的另一个数据进行一些操作。完成后,我的 DBGrid 被刷新并将选定的行重置为第一个。我想在刷新 DBGrid 数据之前选择相同的行。有什么建议么?

4

3 回答 3

4

刷新前,将链接数据集的当前选择保存为书签,然后恢复书签。

于 2009-10-25T11:30:59.420 回答
4

这个答案旨在作为梅森的一个小补充,而不是替代方案。我添加它只是因为出现了另一个答案,错误地建议使用数据集的 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;
于 2014-07-27T09:02:27.690 回答
-1
RecKey:=DmFRM.ViewTBL.RecNo;
          with DmFRM.ViewTBL do
               begin
                  Active:=false;
                  Active:=True;
                  RecNo:=RecKey;
               end;
于 2014-07-27T00:23:04.953 回答