好吧,來自我的某種n00b問題。我在這裏上網和類似的問題,但沒有找到任何正確的答案這樣簡單(我想)的問題。刷新DBGrid後選擇行
我有一個DBGrid。我選擇一行並使用鏈接到此行的另一個數據進行一些操作。完成後,我的DBGrid正在刷新,選定的行重置爲第一個。我想要獲取在刷新DBGrid數據之前選擇的同一行。有什麼建議麼?
好吧,來自我的某種n00b問題。我在這裏上網和類似的問題,但沒有找到任何正確的答案這樣簡單(我想)的問題。刷新DBGrid後選擇行
我有一個DBGrid。我選擇一行並使用鏈接到此行的另一個數據進行一些操作。完成後,我的DBGrid正在刷新,選定的行重置爲第一個。我想要獲取在刷新DBGrid數據之前選擇的同一行。有什麼建議麼?
刷新之前,將鏈接數據集的當前選擇保存爲書籤,然後恢復書籤。
RecKey:=DmFRM.ViewTBL.RecNo;
with DmFRM.ViewTBL do
begin
Active:=false;
Active:=True;
RecNo:=RecKey;
end;
我看到這已經有一個-1,所以我不會加我的。 -1的原因可能並非所有的TDataSet後代都有用地或在某些情況下實現RecNo。因此,作爲Op的問題的一般答案,恐怕沒有用處, – MartynA 2014-07-27 09:05:57
@MartynA:「GetBookmark依靠受保護的方法來獲取書籤值.TDataSet後代實現此方法來提供它們自己的書籤支持類型。單向數據集不支持書籤,因此不會返回有意義的值。「 – 2015-10-02 15:20:24
@Mahmood_M:我不確定你爲什麼要引用我。單向數據集可能不支持書籤,但出於同樣的原因,它們不能直接連接到TDBGrid,即網格依賴於可在兩個方向上導航的數據集。因此,要將單向數據集用於TDBGrid,必須將網格連接到TClientDataset並從單向數據集加載。 – MartynA 2015-10-02 16:15:14
這個答案的目的是爲梅森的一個小補充,而不是替代。我已經添加了它,只是因爲出現了另一個答案,提示使用數據集的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;
Boomark像RecNo一樣工作?或不 ? ,例如:如果我收到書籤,然後刪除選定記錄之前的一些記錄,然後我去書籤,現在選定的記錄與刪除前選擇的記錄相同? ,換句話說:Bookmark store只是RecNo或記錄的位置,或者它存儲關於選定記錄的另一個信息? – 2015-10-02 15:16:22
我認爲這取決於如何在特定的descendanf或TDataset中實現書籤,但如果任何一個常用的僅使用記錄編號,我會感到驚訝。從我研究過的少數幾個人中,他們通常使用包含實現特定數據的緩衝區。如果懷疑給定類型的數據集是否實現書籤,請調用BookmarkValid函數(請參閱OLH)。 – MartynA 2015-10-03 09:05:32
謝謝,我試圖GetBookmark和GotoBookmark刪除記錄:GetBookmark - >刪除選中(書籤)記錄 - > GotoBookmark,我得到一個錯誤:「記錄未找到」,我有一個表應刷新每秒,我想爲了讓用戶滾動,在這種情況下,我認爲我應該使用RecNo,我試過RecNo並且工作正常 – 2015-10-04 09:48:46
是的,它似乎有效。謝謝! – Vlad 2009-10-25 12:27:24
你能給我們一個示例代碼嗎? – truthseeker 2012-01-24 13:39:23