Delphi'nin TDBGrid MEMO Alanlarını Görüntüleme ve Düzenleme

MEMO alanları içeren tablolarla veritabanı uygulamaları geliştiriyorsanız, varsayılan olarak TDBGrid bileşeninin bir DBGrid hücresi içindeki MEMO alanının içeriğini göstermediğini fark edeceksiniz.

Bu makalede, bu TMemoField sorununun nasıl çözüleceği hakkında bir fikir verilmektedir (birkaç ipucu ile) ...

TMemoField

Not alanları, uzun metni veya metin ve sayı birleşimlerini temsil etmek için kullanılır. Delphi kullanarak veritabanı uygulamaları oluştururken, TMemoField nesnesi veri kümesindeki bir not alanını temsil etmek için kullanılır. TMemoField, metin verisi veya keyfi uzunluk içeren alanlarda ortak olan temel davranışı kapsar. Çoğu veritabanında, Not alanının boyutu veritabanının boyutu ile sınırlıdır.

TDBMemo bileşeninde bir MEMO alanının içeriğini görüntüleyebilmenize rağmen, tasarım gereği TDBGrid bu alanların içeriği için yalnızca "(Not)" görüntüler.

Uygun DBGrid hücresinde bazı metinleri (MEMO alanından) görüntülemek için yalnızca basit bir kod satırı eklemeniz gerekir ...

Bir sonraki tartışmanın amacı için, "TestTable" adında bir veritabanı tablonuz olduğunu ve "Data" adında en az bir MEMO alanı olduğunu varsayalım.

instagram viewer

OnGetText

DBGrid'de bir MEMO alanının içeriğini göstermek için, alanın basit bir kod satırını OnGetText Etkinlik. OnGetText olay işleyicisini oluşturmanın en kolay yolu, not alanı için kalıcı bir alan bileşeni oluşturmak üzere tasarım sırasında Alanlar düzenleyicisini kullanmaktır:

  1. TDataset alt bileşeninizi (TTable, TQuery, TADOTable, TADOQuery ...) "TestTable" veritabanı tablosuna bağlayın.
  2. Alanlar düzenleyicisini açmak için veri kümesi bileşenini çift tıklayın
  3. MEMO alanını kalıcı alanlar listesine ekleyin
  4. Alanlar düzenleyicisinde MEMO alanını seçin
  5. Nesne Denetçisinde Etkinlikler sekmesini etkinleştirme
  6. Olay işleyicisini oluşturmak için OnGetText olayını çift tıklatın

Sonraki kod satırını ekleyin (aşağıda italik olarak yazılmıştır):

TForm1.DBTableDataGetText (
Gönderen: Fieldield;
var Metin: Dize;
DisplayText: Boolean);
başla
Metin: = Kopyala (DBTableData. AsString, 1, 50);

Not: veri kümesi nesnesine "DBTable", MEMO alanına "DATA" adı verilir ve bu nedenle, varsayılan olarak, MEMO veritabanı alanına bağlı TMemoField öğesi "DBTableData" olarak adlandırılır. Atayarak DBTableData. AsString -e Metin parametresinde, Delphi'ye TÜM metni bir DBGrid hücresindeki MEMO alanından görüntülemesini söyleriz.
Ayrıca DisplayWidth'i uyarlayın not alanını daha uygun bir değere ayarlayın.

Not: MEMO alanları oldukça BÜYÜK olabileceğinden, yalnızca bir kısmını göstermek iyi bir fikirdir. Yukarıdaki kodda, yalnızca ilk 50 karakter görüntülenir.

Ayrı bir formda düzenleme

Varsayılan olarak, TDBGrid MEMO alanlarının düzenlenmesine izin vermez. "Yerinde" düzenlemeyi etkinleştirmek istiyorsanız, bir TMemo bileşeni kullanarak düzenlemeye izin veren ayrı bir pencere gösteren bir kullanıcı işlemine tepki vermek için bazı kodlar ekleyebilirsiniz.
Kolaylık olması açısından, bir DBGrid'deki MEMO alanına "açık "ken ENTER tuşuna basıldığında bir düzenleme penceresi açacağız.
Hadi kullanalım KeyDown DBGrid bileşeninin olayı:

TForm1.DBGrid1KeyDown (
Gönderen: TObject;
var Anahtar: Kelime;
Shift: TShiftState);
başla
Anahtar = VK_RETURN ise
başla
DBGrid1.SelectedField = DBTableData ise
TMemoEditorForm ile. Oluştur (nil) do
Deneyin
DBMemoEditor. Metin: = DBTableData. AsString;
ShowModal;
DBTable. Düzenle;
DBTableData. AsString: = DBMemoEditor. Metin;
en sonunda
Bedava;
son;
son;
son;

Not 1: "TMemoEditorForm" yalnızca bir bileşen içeren ikincil bir formdur: "DBMemoEditor" (TMemo).
Not 2: "TMemoEditorForm" Proje Seçenekleri iletişim kutusundaki "Formları otomatik oluştur" listesinden kaldırıldı.

DBGrid1'in KeyDown olay işleyicisinde neler olduğunu görelim:

  1. Bir kullanıcı ENTER tuşuna bastığında (Key parametresini VK_RETURN ile karşılaştırıyoruz sanal anahtar kodu) [Anahtar = VK_RETURN],
  2. DBGrid'de seçili olan alan MEMO alanımızsa (DBGrid1.SelectedField = DBTableData),
  3. TMemoEditorForm [TMemoEditorForm] dosyasını oluşturduk. Oluştur (nil)],
  4. MEMO alanının değerini TMemo bileşenine [DBMemoEditor. Metin: = DBTableData. ] AsString,
  5. Formu kalıcı olarak görüntüleme [ShowModal],
  6. Bir kullanıcı düzenlemeyi bitirdiğinde ve formu kapattığında datasteği Düzenleme moduna getirmeliyiz [DBTable. Düzenle],
  7. Düzenlenen değeri MEMO alanımıza [DBTableData. AsString: = DBMemoEditor. Metin].

Not: TDBGrid ile ilgili daha fazla makale ve kullanım ipuçları arıyorsanız şu adresi ziyaret ettiğinizden emin olun: "TDBGrid için MAX"ipuçları koleksiyonu.