Cara Menampilkan dan Mengedit Bidang MEMO di TDBGrid Delphi

Jika Anda mengembangkan aplikasi basis data dengan tabel yang berisi bidang MEMO, Anda akan melihat bahwa, secara default, komponen TDBGrid tidak menampilkan konten bidang MEMO di dalam sel DBGrid.

Artikel ini memberikan ide bagaimana mengatasi masalah TMemoField ini (dengan beberapa trik) ...

TMemoField

Bidang memo digunakan untuk mewakili teks yang panjang atau kombinasi teks dan angka. Saat membangun aplikasi database menggunakan Delphi, objek TMemoField digunakan untuk mewakili bidang memo dalam dataset. TMemoField merangkum perilaku mendasar umum untuk bidang yang berisi data teks atau panjang sewenang-wenang. Di sebagian besar basis data, ukuran bidang Memo dibatasi oleh ukuran basis data.

Meskipun Anda dapat menampilkan konten bidang MEMO dalam komponen TDBMemo, dengan mendesain TDBGrid hanya akan menampilkan "(Memo)" untuk konten bidang tersebut.

Untuk benar-benar menampilkan beberapa teks (dari bidang MEMO) di sel DBGrid yang sesuai, Anda hanya perlu menambahkan satu baris kode sederhana ...

instagram viewer

Untuk tujuan diskusi berikutnya, katakanlah Anda memiliki tabel database bernama "TestTable" dengan setidaknya satu bidang MEMO bernama "Data".

OnGetText

Untuk menampilkan konten bidang MEMO di DBGrid, Anda harus melampirkan baris kode sederhana di bidang itu OnGetText peristiwa. Cara termudah untuk membuat event handler OnGetText adalah dengan menggunakan editor Fields pada waktu desain untuk membuat komponen bidang persisten untuk bidang memo:

  1. Hubungkan komponen turunan TDataset Anda (TTable, TQuery, TADOTable, TADOQuery ...) ke tabel database "TestTable".
  2. Klik dua kali komponen dataset untuk membuka editor Fields
  3. Tambahkan bidang MEMO ke daftar bidang persisten
  4. Pilih bidang MEMO di editor Bidang
  5. Aktifkan tab Events di Object Inspector
  6. Klik dua kali acara OnGetText untuk membuat pengendali acara

Tambahkan baris kode berikutnya (dicetak miring di bawah):

procedure TForm1.DBTableDataGetText (
Pengirim: TField;
var Teks: String;
DisplayText: Boolean);
mulai
Teks: = Salin (DBTableData. AsString, 1, 50);

Catatan: objek dataset disebut "DBTable", bidang MEMO disebut "DATA", dan oleh karena itu, secara default, TMemoField yang terhubung ke bidang basis data MEMO disebut "DBTableData". Dengan menugaskan DBTableData. AsString ke Teks parameter acara OnGetText, kami memberitahu Delphi untuk menampilkan SEMUA teks dari bidang MEMO dalam sel DBGrid.
Anda juga bisa sesuaikan DisplayWidth dari bidang memo ke nilai yang lebih tepat.

Catatan: karena bidang MEMO bisa sangat BESAR, adalah ide yang bagus untuk menunjukkan hanya sebagian saja. Dalam kode di atas, hanya 50 karakter pertama yang ditampilkan.

Mengedit pada formulir terpisah

Secara default, TDBGrid tidak mengizinkan pengeditan bidang MEMO. Jika Anda ingin mengaktifkan pengeditan "di tempat", Anda bisa menambahkan beberapa kode untuk bereaksi pada aksi pengguna yang memperlihatkan jendela terpisah yang memungkinkan pengeditan menggunakan komponen TMemo.
Demi kesederhanaan, kami akan membuka jendela pengeditan ketika ENTER ditekan "pada" bidang MEMO dalam DBGrid.
Mari kita gunakan KeyDown acara komponen DBGrid:

procedure TForm1.DBGrid1KeyDown (
Pengirim: TObject;
var Key: Word;
Shift: TShiftState);
mulai
jika Key = VK_RETURN lalu
mulai
jika DBGrid1.SelectedField = DBTableData lalu
dengan TMemoEditorForm. Buat (nihil) lakukan
mencoba
DBMemoEditor. Teks: = DBTableData. AsString;
ShowModal;
DBTable. Edit;
DBTableData. AsString: = DBMemoEditor. Teks;
akhirnya
Gratis;
akhir;
akhir;
akhir;

Catatan 1: "TMemoEditorForm" adalah bentuk sekunder yang hanya berisi satu komponen: "DBMemoEditor" (TMemo).
Catatan 2: "TMemoEditorForm" telah dihapus dari daftar "Bentuk-buat otomatis" di jendela dialog Opsi Proyek.

Mari kita lihat apa yang terjadi di event handler DBGrid1:

  1. Ketika pengguna menekan tombol ENTER (kami membandingkan parameter Key dengan VK_RETURN kode kunci virtual) [Kunci = VK_RETURN],
  2. Jika bidang yang saat ini dipilih di DBGrid adalah bidang MEMO kami (DBGrid1.SelectedField = DBTableData),
  3. Kami membuat TMemoEditorForm [TMemoEditorForm. Buat (nihil)],
  4. Kirim nilai bidang MEMO ke komponen TMemo [DBMemoEditor. Teks: = DBTableData. AsString],
  5. Tampilkan formulir secara modern [ShowModal],
  6. Ketika pengguna selesai mengedit dan menutup formulir, kita perlu memasukkan dataste ke mode Edit [DBTable. Edit],
  7. Untuk dapat menetapkan nilai yang diedit kembali ke bidang MEMO kami [DBTableData. AsString: = DBMemoEditor. Teks].

Catatan: jika Anda mencari lebih banyak artikel terkait TDBGrid dan tips penggunaan, pastikan untuk mengunjungi: "TDBGrid ke MAX"koleksi tips.

instagram story viewer