Pilih baris setelah menyegarkan DBGrid

Nah, semacam pertanyaan n00b dari saya. Saya telah menjelajahi internet dan pertanyaan serupa di sini tetapi belum menemukan jawaban yang tepat untuk masalah sederhana (seperti yang saya duga).

Saya memiliki DBGrid. Saya memilih satu baris dan melakukan beberapa tindakan dengan data lain yang ditautkan ke baris ini. Setelah saya selesai, DBGrid saya disegarkan dan baris yang dipilih disetel ulang ke baris pertama. Saya ingin memilih baris yang sama dengan yang dipilih sebelum menyegarkan data DBGrid. Ada saran?


person Vlad    schedule 25.10.2009    source sumber


Jawaban (3)


Sebelum menyegarkan, simpan pilihan himpunan data tertaut saat ini sebagai penanda, lalu pulihkan penanda setelahnya.

person Mason Wheeler    schedule 25.10.2009

Jawaban ini dimaksudkan sebagai pelengkap kecil bagi jawaban Mason, bukan sebagai alternatif. Saya menambahkannya hanya karena jawaban lain telah muncul, menyarankan, salah, penggunaan properti RecNo kumpulan data. Tidak semua turunan TDataSet mengimplementasikan RecNo dengan andal atau tidak sama sekali. Beberapa keturunan hanya mengembalikan nilai konstan, mis. 0 untuk RecNo baris saat ini dan tidak melakukan apa pun saat Anda menetapkan nilai padanya.

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;
person MartynA    schedule 27.07.2014
comment
Boomark berfungsi seperti RecNo? atau tidak ? , misalnya: jika saya mendapatkan bookmark, lalu menghapus beberapa record sebelum record yang dipilih dan selanjutnya saya pergi ke bookmark, sekarang record yang dipilih sama dengan yang dipilih sebelum dihapus? , dengan kata lain : Bookmark hanya menyimpan RecNo atau Position dari record atau menyimpan info lain tentang record yang dipilih ? - person G3ntle_Man; 02.10.2015
comment
Saya pikir itu tergantung pada bagaimana bookmark diimplementasikan dalam keturunan atau TDataset tertentu, tapi saya akan terkejut jika ada yang umum hanya menggunakan nomor catatan. Dari beberapa yang saya lihat, mereka biasanya menggunakan buffer yang berisi data spesifik implementasi. Jika ragu apakah tipe dataset tertentu mengimplementasikan bookmark, panggil fungsi BookmarkValid (lihat OLH). - person MartynA; 03.10.2015
comment
terima kasih, saya mencoba GetBookmark dan GotoBookmark untuk catatan yang dihapus: GetBookmark -› Hapus Catatan yang Dipilih (Ditandai) -› GotoBookmark, dan saya mendapat kesalahan: Catatan tidak ditemukan, saya memiliki tabel yang harus disegarkan setiap detik dan saya ingin mempertahankan pengguna bergulir , dalam situasi ini saya pikir saya harus menggunakan RecNo , saya mencoba RecNo dan berfungsi dengan baik - person G3ntle_Man; 04.10.2015

person    schedule
comment
Saya melihat ini sudah memiliki -1, jadi saya tidak akan menambahkan milik saya. Alasan -1 mungkin karena tidak semua turunan TDataSet mengimplementasikan RecNo dengan berguna atau dalam beberapa kasus, tidak mengimplementasikan sama sekali. Jadi, saya khawatir ini tidak berguna sebagai jawaban umum atas pertanyaan Op, - person MartynA; 27.07.2014
comment
@MartynA : GetBookmark mengandalkan metode yang dilindungi untuk mendapatkan nilai bookmark. Keturunan TDataSet menerapkan metode ini untuk menyediakan jenis dukungan bookmarknya sendiri. Kumpulan data searah tidak mendukung bookmark, sehingga tidak mengembalikan nilai yang berarti. - person G3ntle_Man; 02.10.2015
comment
@Mahmood_M: Saya tidak yakin mengapa Anda mengutip hal itu kepada saya. Kumpulan data searah mungkin tidak mendukung bookmark, namun karena alasan yang sama, kumpulan data tersebut tidak dapat dihubungkan langsung ke TDBGrid, yaitu grid bergantung pada kumpulan data yang dapat dinavigasi di kedua arah. Jadi, untuk menggunakan kumpulan data searah ke TDBGrid, Anda harus menghubungkan grid ke TClientDataset dan memuatnya dari kumpulan data searah. - person MartynA; 02.10.2015