كيفية فرز السجلات في دلفي DBGrid حسب عنوان العمود

click fraud protection

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

اتباع المفاهيم الموضحة في دليل المبتدئين لدلفي برمجة قواعد البيانات، الأمثلة التالية تستخدم مكونات ADO (AdoQuery / AdoTable متصلة بـ ADOConnection ، DBGrid متصلة بـ AdoQuery عبر DataSource) لعرض السجلات من جدول قاعدة بيانات في مكون DBGrid.

تم ترك جميع أسماء المكونات كما حددها دلفي عند إسقاطها في النموذج (DBGrid1 ، ADOQuery1 ، AdoTable1 ، إلخ).

تحرك الماوس فوق منطقة عنوان DBGrid

أولاً ، دعونا نرى كيفية تغيير مؤشر الماوس أثناء تحريكه فوق منطقة عنوان DBGrid. كل ما عليك القيام به هو إضافة التعليمات البرمجية إلى الحدث OnMouseMove لمكون DBGrid.

يستخدم التعليمة البرمجية أدناه ببساطة خاصية MouseCoord لمكون DBGrid "لحساب" حيث يكون مؤشر الماوس. إذا كان فوق مساحة عنوان DGBrid ، فإن pt.y تساوي 0 ، وهو الصف الأول في DBGrid (منطقة العنوان تعرض عناوين الأعمدة / الحقول).

إجراء
instagram viewer
TForm1.DBGrid1MouseMove
(المرسل: TObject ؛ التحول: TShiftState. س ، ص: عدد صحيح) ؛
فار
pt: TGridcoord ؛
ابدأ
pt: = DBGrid1.MouseCoord (x، y)؛
إذا pt.y = 0 ثم
DBGrid1.Cursor: = crHandPoint
آخر
DBGrid1.Cursor: = crDefault؛
النهاية;

فرز على العمود انقر فوق وتغيير خط عنوان العمود

إذا كنت تستخدم نهج ADO لتطوير قاعدة بيانات دلفي ، وترغب في فرز السجلات في مجموعة البيانات ، فأنت بحاجة إلى تعيين خاصية الفرز الخاصة بـ AdoDataset (ADOQuery ، AdoTable).

الخاصية فرز هي قيمة widestring تشير إلى الجزء "ORDER BY" من استعلام SQL القياسي. بالطبع ، لا تحتاج إلى كتابة استعلام SQL لتتمكن من استخدام خاصية التصنيف. ما عليك سوى تعيين خاصية Sort إلى اسم حقل واحد أو قائمة حقول مفصولة بفواصل ، كل منها يتبع ترتيب الفرز.

إليك مثال:

ADOTable1.Sort: = 'سنة DESC ، ArticleDate ASC'

يحتوي الحدث OnTitleClick لمكون DBGrid على معلمة عمود تشير إلى العمود الذي نقر عليه المستخدم. يحتوي كل عمود (كائن من النوع TColumn) على خاصية حقل تشير إلى الحقل (TField) الذي يمثله العمود ، والحقل الموجود في خاصية اسم الحقل الخاص به يحمل اسم الحقل في المصدر مجموعة البيانات.

لذلك ، لفرز مجموعة بيانات ADO حسب الحقل / العمود ، يمكن استخدام سطر بسيط:

مع TCustomADODataSet (DBGrid1.DataSource. DataSet) القيام به
فرز: = العمود. حقل. اسم الحقل؛ // + "ASC" أو "DESC"

يوجد أدناه رمز معالج OnTitleClick حتى يقوم بفرز السجلات بنقرة العمود. رمز ، كما هو الحال دائما ، يمتد الفكرة.

أولاً ، نريد ، إلى حد ما ، تحديد العمود المستخدم حاليًا لترتيب الفرز. بعد ذلك ، إذا نقرنا على عنوان العمود وتم فرز مجموعة البيانات بالفعل حسب هذا العمود ، فنحن نريد تغيير ترتيب الفرز من ASC (تصاعدي) إلى DESC (تنازلي) ، والعكس بالعكس. أخيرًا ، عندما نقوم بترتيب مجموعة البيانات حسب عمود آخر ، نريد إزالة العلامة من العمود المحدد مسبقًا.

من أجل البساطة ، لتمييز العمود الذي "يفرز" السجلات ، سنقوم ببساطة بتغيير نمط الخط لعنوان العمود إلى Bold ، وإزالته عندما يتم فرز مجموعة البيانات باستخدام عمود آخر.

إجراء TForm1.DBGrid1TitleClick (العمود: TColumn) ؛
{$ J +}مقدار ثابت PreviousColumnIndex: integer = -1؛
{$ J-}
startif DBGrid1.DataSource. مجموعة البيانات يكون TCustomADODataSet ثم TCustomADODataSet (DBGrid1.DataSource. مجموعة البيانات) dobegintry
DBGrid1.Columns [PreviousColumnIndex]. العنوان. الخط. نمط: =
DBGrid1.Columns [PreviousColumnIndex]. العنوان. الخط. النمط - [fsBold] ؛
باستثناء;
العمود. الخط. نمط: =
العمود. الخط. نمط + [fsBold] ؛
PreviousColumnIndex: = العمود. فهرس؛
إذا (Pos (العمود. حقل. اسم الحقل ، فرز) = 1)
و (Pos ('DESC' ، فرز) = 0) ثم
فرز: = العمود. حقل. اسم الحقل + "DESC"
آخر
فرز: = العمود. حقل. اسم الحقل + "ASC" ؛
النهاية;
النهاية;

يستخدم الرمز أعلاه ثوابت مطبوعة للحفاظ على قيمة العمود "المحدد" مسبقًا لترتيب الفرز.

instagram story viewer