قائمة منسدلة داخل DBGrid

إليك كيفية وضع قائمة اختيار منسدلة في DBGrid. إنشاء واجهات مستخدم أكثر جاذبية بصريًا لتحرير حقول البحث داخل DBGrid - باستخدام خاصية PickList لعمود DBGrid.

الآن ، أنت تعرف ما هي حقول البحث ، وما هي خيارات عرض حقل البحث فيها دلفيDBGrid ، حان الوقت لمعرفة كيفية استخدام خاصية PickList لعمود DGBrid لتمكين المستخدم من اختيار قيمة لحقل بحث من مربع قائمة منسدلة.

معلومات سريعة عن خاصية أعمدة DBGrid

أ DBGrid عنصر التحكم يحتوي على خاصية أعمدة - مجموعة من كائنات TColumn التي تمثل جميع الأعمدة في عنصر تحكم شبكة. يمكن تعيين الأعمدة في وقت التصميم من خلال محرر الأعمدة ، أو برمجياً في وقت التشغيل. سوف تضيف عادة الأعمدة إلى DBGird عندما تريد تحديد كيفية ظهور العمود ، وكيفية عرض البيانات في العمود والوصول إلى خصائص وأحداث وأساليب TDBGridColumns في وقت التشغيل. تمكنك الشبكة المخصصة من تكوين أعمدة متعددة لتقديم طرق عرض مختلفة لنفسها مجموعة بيانات (أوامر أعمدة مختلفة ، خيارات حقل مختلفة ، وألوان وخطوط أعمدة مختلفة ، لـ مثال).

الآن ، "كل" عمود في شبكة "مرتبط" بحقل من مجموعة بيانات معروضة في الشبكة. ما هو أكثر من ذلك ، كل عمود له خاصية PickList. تسرد خاصية PickList القيم التي يمكن للمستخدم تحديدها لقيمة الحقل المرتبط بالعمود.

instagram viewer

ملء قائمة PickList

ما ستتعلمه هنا هو كيفية ملء قائمة السلاسل تلك بقيم من مجموعة بيانات أخرى في وقت التشغيل.
تذكر أننا نقوم بتحرير جدول المقالات وأن حقل الموضوع يمكن أن يقبل القيم من جدول الموضوعات فقط: الوضع المثالي لقائمة PickList!

إليك كيفية إعداد خاصية PickList. أولاً ، نقوم بإضافة مكالمة إلى الإجراء SetupGridPickList في معالج الأحداث OnCreate للنموذج.

إجراء TForm1.FormCreate (المرسل: TObject) ؛
ابدأ
SetupGridPickList ('الموضوع' ، 'SELECT Name FROM Subjects') ؛
النهاية;

أسهل طريقة لإنشاء الإجراء SetupGridPickList هي الانتقال إلى الجزء الخاص من إعلان النموذج ، أضف الإعلان هناك واضغط على تركيبة المفاتيح CTRL + SHIFT + C - اكتمال رمز دلفي راحة:

...
اكتب
TForm1 = فئة (TForm)
...
privateprocedure SetupGridPickList (
مقدار ثابت اسم الحقل: خيط;
مقدار ثابت sql: خيط);
عامة
...

ملاحظة: يأخذ الإجراء SetupGridPickList معلمتين. المعلمة الأولى ، FieldName ، هي اسم الحقل الذي نريد أن نتصرف فيه كحقل بحث ؛ المعلمة الثانية ، SQL ، هي تعبير SQL الذي نستخدمه لتعبئة قائمة PickList بالقيم الممكنة - بشكل عام ، يجب أن يُرجع تعبير SQL مجموعة بيانات مع حقل واحد فقط.

إليك كيفية ظهور SetupGridPickList:

إجراء TForm1.SetupGridPickList (مقدار ثابت اسم الحقل ، sql: خيط);
فار
slPickList: TStringList؛
الاستعلام: TADOQuery؛
i: عدد صحيح
ابدأ
slPickList: = TStringList. خلق؛
الاستعلام: = TADOQuery. خلق (النفس) ؛
محاولة
الاستعلام. الاتصال: = ADOConnection1 ؛
الاستعلام. SQL.Text: = sql؛
الاستعلام. افتح؛
/ / املأ قائمة السلسلةفي حينليس الاستعلام. EOF dobegin
slPickList. إضافة (استعلام. الحقول [0] .AsString) ؛
الاستعلام. التالى؛
النهاية; //while
/ / ضع القائمة العمود الصحيحإلى عن على أنا: = 0 إلى DBGrid1.Columns. العد 1 فعل
إذا DBGrid1.Columns [i] .FieldName = FieldName ثم تبدأ
DBGrid1.Columns [i] .PickList: = slPickList؛
استراحة؛
النهاية;
أخيرا
slPickList. مجانا؛
الاستعلام. مجانا؛
النهاية;
النهاية; (* SetupGridPickList *)

هذا هو. الآن ، عند النقر فوق عمود الموضوع (للدخول في وضع التحرير).

ملاحظة 1: بشكل افتراضي ، تعرض القائمة المنسدلة 7 قيم. يمكنك تغيير طول هذه القائمة عن طريق تعيين خاصية DropDownRows.

ملاحظة 2: لا شيء يمنعك من ملء قائمة الاختيار من قائمة القيم التي لا تأتي من جدول قاعدة البيانات. على سبيل المثال ، إذا كان لديك حقل يقبل أسماء أيام الأسبوع فقط ("الاثنين" ،... ، "الأحد") ، يمكنك إنشاء قائمة اختيار "مشفرة".

"أه ، أحتاج إلى النقر فوق قائمة الاختيار 4 مرات ..."

لاحظ أنه عندما تريد تحرير الحقل الذي يعرض قائمة منسدلة ، ستحتاج إلى النقر فوق الخلية 4 مرات من أجل اختيار قيمة بالفعل من القائمة. مقتطف الشفرة التالي ، الذي تمت إضافته إلى معالج الأحداث OnCellClick الخاص بـ DBGrid ، يحاكي الضرب إلى المفتاح F2 متبوعًا Alt + DownArrow.

إجراء TForm1.DBGrid1CellClick (العمود: TColumn) ؛
ابدأ// جعل قائمة الاختيار المنسدلة تظهر بشكل أسرعإذا عمود. قائمة الانتقاء. عدد> 0 ثم تبدأ
keybd_event (VK_F2،0،0،0) ؛
keybd_event (VK_F2،0 ، KEYEVENTF_KEYUP ، 0) ؛
keybd_event (VK_MENU ، 0،0،0) ؛
keybd_event (VK_DOWN، 0،0،0)؛
keybd_event (VK_DOWN، 0، KEYEVENTF_KEYUP، 0) ؛
keybd_event (VK_MENU، 0، KEYEVENTF_KEYUP، 0) ؛
النهاية;
النهاية;