السلام عليكم
أخي لم تحدد ما إذا كنت تستعمل جدول قاعدة بيانات أم لا .. ولكنني سأفترض أنك تستخدم جدول قاعدة بيانات .. وإذا كنت كذلك فهل حقل الشهر هو من النوع الحرفي أم هو رقمي ..
عموما : سأفترض أنك تستخدم حقل الشهر من النوع الحرفي واسمه Month وبعد ذلك ستكون التغييرات بسيطة إذا كان الحقل رقمي
الفكرة هنا أنك ستقوم بفلترة الحدول حسب التحديد المطلوب وباعتبار أن الجدول مربوط بالكويك ريبورت فإن السجلات المحددة فقط هي التي ستظهر ... إذا اللعبة هنا في الفلترة وبإعتبار أن الفلترة متغيرة سيكون الشغل كله على CheckBox
إذا ماعليك فعله هو :
أولا - قم بتعريف متغيرات عامة وهي S , Filter من نوع ٍString و List من نوع TStringList
ثانيا في حدث OnCreate الخاص بالفورم أكتب
كود :
List := TStringList.Create;
List.Delimiter := ',';
s := '';
ثالثا - حدد CheckBox الأول وقم بكتابة الكود التالي في حدث OnClick الخاص به
كود :
if TCheckBox(Sender).Checked then
begin
List.Add(TCheckBox(Sender).Caption);
s := List.DelimitedText;
end
else
begin
List.Delete(List.IndexOf(TCheckBox(Sender).Caption));
s := List.DelimitedText;
end;
Filter := 'Month = '+StringReplace(s, ',',' Or Month = ', [rfReplaceAll]);
رابعا : وهو الأهم .. قم بتحديد بقية CheckBox ماعدا الأول ثم إقتح قائمة الحدث وأذهب إلى حدث Onclick ولكن لا تقم بالنقر المزدزج عليه ، بل إضغط على المثلث في اليمين لتظهر لك قائمة إختر منها الحدث السابق لـ CheckBox الأول .. سيتم تنفيذ الكود في حدث Onclick الخاص بـ CheckBox الأول عن طريق بقية الـ CheckBoxes
النتيجة أن المتغير الذي أسميناه Filter سيحصل على ChckBox المحددة فقط وبعد ذلك قم بتطبيق نتيجة الاختيارات على الفلتر الخاص بالجدول بهذا الشكل
على افتراض أن مكون الجدول اسمه Table1 وأن لديك زر لإظهار الكويك ريبورت
قبل إظهار الكويك ريبوت ضع هذا الكود
كود :
Table1.Close;
Table1.Filtered := False;
Table1.Filter := Filter;
Table1.Filtered := True;
Table1.Open;
بإذن الله ستظهر لك نتائج مرضية
طبعا ستقوم ببعض التعديلات ليظهر التقرير كما بالصزرة
تبقى مسألة حقل الشهر إذا كان من النوع الرقمي .. هنا يمكنك إستخدام CheckBox.tag بدلا من CheckBox.Caption
ماعليك فعله هو لإعطاء tag رقم الشهر بدلا من اسمه وسيشتغل بإذن الله