Domanda

Beh, una specie di domanda n00b da parte mia. Ho navigato in rete e domande simili qui ma non ho trovato le risposte giuste per un problema così semplice (come pensavo).

Ho un DBGrid. Seleziono una riga e compio alcune azioni con altri dati collegati a questa riga. Al termine, il mio DBGrid viene aggiornato e la riga selezionata viene reimpostata per prima. Voglio ottenere la stessa riga selezionata che è stata selezionata prima di aggiornare i dati DBGrid. Qualche suggerimento?

È stato utile?

Soluzione

Prima di aggiornare, salva la selezione corrente del set di dati collegato come segnalibro, quindi ripristina il segnalibro in seguito.

Altri suggerimenti

Questa risposta è intesa come un supplemento minore a quello di Mason, non come alternativa. L'ho aggiunto solo perché è apparsa un'altra risposta, che suggerisce, in modo errato imo, l'uso della proprietà RecNo del set di dati. Non tutti i discendenti di TDataSet implementano RecNo in modo affidabile o affatto. Alcuni discendenti restituiscono solo un valore costante, ad es. 0 per il RecNo delle righe correnti e non fare nulla quando gli si assegna un valore.

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top