سؤال

أنا أستخدم devexpress tdxmemdata. في الذاكرة tdataset سليل. أثناء ترشيحها: Boolean و Filter: خصائص السلسلة، لا يبدو أن تفعل أي شيء معهم تلقائيا، بدلا من الاعتماد على نتيجة لمعلمة OnFilterRecord قبول الحدث.

إذن ما أبحث عنه هو وسيلة (ربما في tdxmemdata أو في مكان آخر في مجموعة الكود Devexpress) لتحليل نص المرشح وتطبيقه على مجموعة البيانات.

من الناحية المثالية، أود الحصول على طريقة لاختبار صف فردي مقابل المرشح لمعرفة ما إذا كان يطابق دون تصفيةها من DataSet (أريد تمييز الصفوف التي تتطابق مع المرشح).

مثال سلسلة تصفية:

((Name = 'Jim') and (Rep > 1000)) or (Rep > 5000)

لذلك هناك متداخلة و أو أو؟ تم بناؤه بالفعل بواسطة Devexpress Tcxdbfiltertercontrol.

آمل حقا أن يكون هناك شيء بسيط أنا في عداد المفقودين.

تحديث: فتحت أ تذكرة مع devexpress. لمعرفة ما إذا كانوا يدعمون أي نوع من الحل. أنا وجدت أجابهم الأسهم ذلك انهم لا يدعمون التصفية على tdxmemdata.

هل كانت مفيدة؟

المحلول

أعلم أن هذا ليس هو الرد على تبحث عنه، ولكن DataSet Tdxmemdata لا يدعم سلاسل المرشح. لاستخدام المرشحات إما رمز الحدث OnFiltererRecord الخاص بك أو تعيين programmedfilter إلى True وملء قائمة المرشح مع قائمة السجلات التي يتم تصفيتها (في وقت التشغيل).

يمكن أن يكون أحد الاحتمالات رمز المحلل الخاص بك لمقارنة سلسلة المرشح مقابل السجل الحالي في حدث OnFilterRecord.

نصائح أخرى

قد ترغب في النظر في استبدال tdxmemdata مع tkbmmemtable.. وبعد إنه مجاني، يعمل بشكل مشابه لمكون DX، ويدعم سلاسل المرشح. من المرجح أن يستغرق وقتا أقل بكثير للميناء أكثر مما ستنفذ محلل سلسلة مرشح في Onfilterrecord! ستعمل مع مكونات DX الأخرى دون مشاكل.

ما تبحث عنه هو عدم تصفية البيانات، ولكن مسألة عرضها بشكل مختلف إذا أفي بشرط. إذا كنت تستخدم TDBGrid لعرض البيانات، فابحث في حدث Drawcolumncell () على TDBGrid:

procedure TForm1.dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  DBG: TDBGrid;
begin
  DBG := TDBGrid(Sender);
  // Add any other conditions from your 'filter' here in the next line.
  if (YourData.FieldByName('WHATEVER').AsString = 'Jim') and
     (YourData.FieldByName('REP').AsInteger > 1000) then
    Column.Font.Color := clRed;
  DBG.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

نظرا لأنك تستخدم TDXMEMDATA، فمن المحتمل أنك تستخدم شبكة Devex أيضا. يجب أن يكون لها طريقة مماثلة لفعل شيء آخر غير الرسم الافتراضي؛ يمكنك استخدام تقنية مماثلة هناك. (لم أستخدم الاشياء DEVEX في غضون بضع سنوات؛ صاحب العمل الحالي لا يحبها، وبالتالي لن ينبع للنفقات. :-()

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top