تنفيذ تحديد موضع وتلوين الصفوف في DBGrid في DELPHI
عند تشغيل نظام قاعدة بيانات، وجدت أن صف البيانات في عنصر تحكم DBGrid لا يمكن تحديد موضعه، وأنه بعد تحديد موقع صف معين، لا يمكن تحديد الصف الحالي بوضوح (مثل تغيير اللون بعد البحث عنه كثيرًا). المعلومات، وجدت أنه لا يوجد أساسًا أي مقدمة لهذا المحتوى، بما في ذلك بعض الألوان الديناميكية للصف العلوي. تحدثت مقالات مثل Se عن العمليات التي تم إجراؤها أثناء تهيئة البيانات، لكنها لم تكن تحتوي على وظيفة إعادة تحديد الموضع بعد تحديث مصدر البيانات، لذلك قررت حل هذه المشكلة بعد صباح من البحث عن DELPHI ومراجعة المعلومات ذات الصلة، وجدت القليل شياو تشنغ، اكتبه الآن وتعلم منه مع جميع زملائي، من فضلك أعطني بعض النصائح بشأن أي شيء غير مناسب.
أولاً، بحثت في عناصر التحكم Ttable وTquery ولم أجد طريقة يمكنها تحديد موقع صف البيانات مباشرةً، كما بحثت عن DBGrid ولم أجد أي وظيفة مقابلة يمكنها تحديد موقع صف معين من البيانات مباشرةً بعد الجهود المتواصلة، وجدت أخيرًا طريقة في TdataSet: GoToBookmark. يمكن لهذه الطريقة أن تجعل مؤشر السجل في DBGrid يشير إلى الصف الذي تريد تحديده.
بعد العثور على هذه الطريقة، تم حل المشكلة جزئيًا فقط. يجب أيضًا تغيير لون صف البيانات الذي يشير إليه المؤشر الحالي، وهذا يعني أنه يجب تحديد الصف المحدد حاليًا بطريقة واضحة (باستثناء الصف الصغير). وواحد غريب على DBGrid). (باستثناء الإشارات المرجعية الواضحة) من الواضح أن هذا يتم تنفيذه في عنصر تحكم DBGrid. هناك حدث OnDrawDataCell في عنصر تحكم DBGrid يمكن أن يؤدي التحميل الزائد بهذه الطريقة إلى تغيير لون صف البيانات المحدد.
عملية الاستخدام المحددة هي كما يلي:
(1) وضع صفوف البيانات ديناميكيًا
//================================================================================================ ==============
// اسم العملية: DyDbgDataLine
// المؤلف: هايتي
// التاريخ: 2003-02-22
// الوظيفة: الانتقال تلقائيًا إلى صف من البيانات في عنصر تحكم DBGrid الذي يلبي هذا الشرط بناءً على الشروط المحددة من قبل المستخدم
// معلمات الإدخال:
// sValue: قيمة الصف الذي يحتاج إلى النقل حاليًا؛
// علامة التبويب: بيانات الجدول المقابل في DBGrid الحالي؛
// dsr: مصدر البيانات الذي يحتاج إلى التشغيل حاليًا؛
//قيمة الإرجاع: لا شيء
// تعديل السجلات:
//================================================================================================ ===============
PROcedure DyDbgDataLine(sValue:string;tab:Ttable;dsr:TDatasource)
فار
المرجعية:TBookMark؛
يبدأ
// سجل الخط المحدد حاليًا؛
bookmark:=self.tab.GetBookmark;
self.tab.first;
في حين لا self.tab.Eof القيام به
يبدأ
إذا self.tab.FieldByName('cpbh').AsString= sValue ثم
يبدأ
bookmark:=self.tab.GetBookmark;
استراحة؛
نهاية؛
self.tab.Next;
نهاية؛
self.dsr.DataSet.GotoBookmark(pointer(bookmark));
نهاية؛
الوصف: تم ربط الجدول المستخدم بـ DBGrid على واجهة العرض الحالية؛
(2) قم بتغيير اللون لتمييز صف البيانات الحالي
أولاً، قم بتعيين الخاصية DefaultDrawing لـ DBGrid إلى false، ثم قم باستدعاء الوظيفة التالية في دالة الحدث OnDrawDataCell:
//================================================================================================ ==============
// اسم العملية: DrawLine
// المؤلف: هايتي
// التاريخ: 2003-02-22
// الوظيفة: تغيير لون الصف المحدد في Dbgrid كعلامة؛
// معلمات الإدخال:
// zdm: اسم الحقل؛
// المستقيم: وحدة الصف التي يجب إدخالها والخروج منها؛
// الحقل: الحقل المعروض حاليًا؛
// الحالة: حالة عرض الصف الحالي؛
// zdz: قيمة الصف الذي يجب نقله حاليًا؛
// علامة التبويب: بيانات الجدول المقابل في DBGrid الحالي؛
// dbg: DBGrid التي تحتاج حاليًا إلى التشغيل؛
//قيمة الإرجاع: لا شيء
// تعديل السجلات:
//================================================================================================ ===============
procedurDrawLine(tab:Ttable;const Rect:Trect;Field:Tfield;state:TgridDrawState;dbg:TDBGrid)
يبدأ
إذا (tab.fieldbyname(zdm).asstring=zdz)ثم
يبدأ
dbg.canvas.font.color:=clred;
dbg.canvas.brush.color:=clyellow;
نهاية؛
dbg.DefaultDrawDataCell(Rect,Field,State);
نهاية؛