كيفية عرض وتحرير حقول MEMO في TDBGrid دلفي

click fraud protection

إذا كنت تقوم بتطوير تطبيقات قاعدة بيانات بجداول تحتوي على حقول MEMO ، فستلاحظ أنه بشكل افتراضي ، لا يعرض مكون TDBGrid محتويات حقل MEMO داخل خلية DBGrid.

تقدم هذه المقالة فكرة عن كيفية حل مشكلة TMemoField هذه (مع بعض الحيل الإضافية) ...

TMemoField

يتم استخدام حقول المذكرة لتمثيل النص المطول أو مجموعات من النص والأرقام. عند بناء تطبيقات قاعدة البيانات باستخدام دلفي ، يتم استخدام كائن TMemoField لتمثيل حقل المذكرة في مجموعة البيانات. يغلف TMemoField السلوك الأساسي الشائع في الحقول التي تحتوي على بيانات نصية أو طول عشوائي. في معظم قواعد البيانات ، يكون حجم حقل المذكرة محدودًا بحجم قاعدة البيانات.

بينما يمكنك عرض محتويات حقل MEMO في مكون TDBMemo ، إلا أن TDBGrid سيعرض "(Memo)" فقط لمحتويات هذه الحقول.

لعرض بعض النصوص بالفعل (من حقل MEMO) في خلية DBGrid المناسبة ، ستحتاج فقط إلى إضافة سطر بسيط من التعليمات البرمجية ...

لغرض المناقشة التالية ، لنفترض أن لديك جدول قاعدة بيانات باسم "TestTable" مع حقل MEMO واحد على الأقل باسم "البيانات".

OnGetText

لإظهار محتويات حقل MEMO في DBGrid ، تحتاج إلى إرفاق سطر بسيط من التعليمات البرمجية في الحقل

instagram viewer
OnGetText حدث. أسهل طريقة لإنشاء معالج الأحداث OnGetText هي استخدام محرر الحقول في وقت التصميم لإنشاء مكون حقل ثابت لحقل المذكرة:

  1. قم بتوصيل مكون سلالة TDataset (TTable و TQuery و TADOTable و TADOQuery ...) بجدول قاعدة بيانات "TestTable".
  2. انقر نقرًا مزدوجًا فوق مكون مجموعة البيانات لفتح محرر الحقول
  3. أضف حقل MEMO إلى قائمة الحقول الثابتة
  4. حدد حقل MEMO في محرر الحقول
  5. قم بتنشيط علامة التبويب الأحداث في عارض الكائنات
  6. انقر نقرًا مزدوجًا فوق حدث OnGetText لإنشاء معالج الأحداث

أضف السطر التالي من الشفرة (مائل أدناه):

الإجراء TForm1.DBTableDataGetText (
المرسل: TField؛
var نص: String؛
عرض النص: منطقي) ؛
ابدأ
النص: = نسخ (DBTableData. AsString ، 1 ، 50) ؛

ملاحظة: يسمى كائن مجموعة البيانات "DBTable" ، ويطلق على حقل MEMO "DATA" ، وبالتالي بشكل افتراضي ، يسمى TMemoField المتصل بحقل قاعدة بيانات MEMO "DBTableData". عن طريق التعيين DBTableData. كسلسلة إلى نص معلمة حدث OnGetText ، نطلب من Delphi عرض كل النص من حقل MEMO في خلية DBGrid.
يمكنك أيضا تكييف DisplayWidth من حقل المذكرة إلى قيمة أكثر ملاءمة.

ملاحظة: بما أن حقول MEMO يمكن أن تكون كبيرة جدًا ، فمن الجيد إظهار جزء منها فقط. في الرمز أعلاه ، يتم عرض أول 50 حرفًا فقط.

التحرير في نموذج منفصل

بشكل افتراضي ، لا يسمح TDBGrid بتحرير حقول MEMO. إذا كنت ترغب في تمكين التحرير "في المكان" ، يمكنك إضافة بعض التعليمات البرمجية للرد على إجراء المستخدم الذي يُظهر نافذة منفصلة تسمح بالتحرير باستخدام مكون TMemo.
من أجل البساطة ، سنفتح نافذة تحرير عند الضغط على ENTER "على" حقل MEMO في DBGrid.
دعونا نستخدم زر أسفل حدث مكون DBGrid:

الإجراء TForm1.DBGrid1KeyDown (
المرسل: الهدف ؛
var key: Word؛
التحول: TShiftState) ؛
ابدأ
إذا كان المفتاح = VK_RETURN إذن
ابدأ
إذا DBGrid1.SelectedField = DBTableData ثم
مع TMemoEditorForm. خلق (لا) تفعل
محاولة
DBMemoEditor. النص: = DBTableData. كسلسلة؛
ShowModal ؛
DBTable. تعديل؛
DBTableData. AsString: = DBMemoEditor. نص؛
أخيرا
مجانا؛
النهاية؛
النهاية؛
النهاية؛

ملاحظة 1: "TMemoEditorForm" هو نموذج ثانوي يحتوي على مكون واحد فقط: "DBMemoEditor" (TMemo).
ملاحظة 2: تمت إزالة "TMemoEditorForm" من قائمة "إنشاء النماذج تلقائيًا" في نافذة خيارات المشروع.

دعنا نرى ما يحدث في معالج الأحداث KeyDown الخاص DBGrid1:

  1. عندما يضغط المستخدم على المفتاح ENTER (نقوم بمقارنة معلمة المفتاح بالمفتاح VK_RETURN رمز المفتاح الظاهري) [المفتاح = VK_RETURN] ،
  2. إذا كان الحقل المحدد حاليًا في DBGrid هو حقل MEMO الخاص بنا (DBGrid1.SelectedField = DBTableData) ،
  3. نقوم بإنشاء TMemoEditorForm [TMemoEditorForm. إنشاء (لا شيء)] ،
  4. إرسال قيمة حقل MEMO إلى مكون TMemo [DBMemoEditor. النص: = DBTableData. كسلسلة]،
  5. عرض النموذج بشكل مشروط [ShowModal] ،
  6. عندما ينتهي المستخدم من التحرير ويغلق النموذج ، نحتاج إلى وضع البيانات في وضع التحرير [DBTable. تعديل]،
  7. من أجل أن تكون قادرًا على تعيين القيمة المحررة إلى حقل MEMO الخاص بنا [DBTableData. AsString: = DBMemoEditor. نص].

ملاحظة: إذا كنت تبحث عن المزيد من المقالات ونصائح الاستخدام المتعلقة بـ TDBGrid ، فتأكد من زيارة: "TDBGrid إلى الحد الأقصى"مجموعة النصائح.

instagram story viewer