delphi4arab منتديات دلفي للعرب
التصفية حسب التحديد في dbgrid - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : التصفية حسب التحديد في dbgrid (/showthread.php?tid=10680)

الصفحات: 1 2


التصفية حسب التحديد في dbgrid - احمد العراقي - 25-02-2020

السلام عليكم اعضاء و مشرفي المنتدى الاعزاء
لدي سؤال و هو كيف يتم تصفية جدول حسب ما تم تحديده من dbgrid اي يقوم المستخدم بتحديد عدة سجلات من dbgrid ومن ثم عند الضغط على الزر يتم اخفاء جميع السجلات و ابقاء السجلات التي تم تحديدها فقط طبعا خاصية MultiSelect =true الموجودة في option
وشكرا


RE: التصفية حسب التحديد في dbgrid - أبو معاذ - 25-02-2020

(25-02-2020, 11:28 AM)احمد العراقي كتب : [size=small]السلام عليكم اعضاء و مشرفي المنتدى الاعزاء[/size]
[size=small]لدي سؤال و هو كيف يتم تصفية جدول حسب ما تم تحديده من dbgrid اي يقوم المستخدم بتحديد عدة سجلات من dbgrid ومن ثم عند الضغط على الزر يتم اخفاء جميع السجلات و ابقاء السجلات التي تم تحديدها فقط طبعا خاصية MultiSelect =true الموجودة في option[/size]
[size=small]وشكرا[/size]


وعليكم السلام ورحمة الله وبركاته ،
هذه العملية تسمى الفلترة ، هناك العديد من المواضيع حول الفلترة فقط قم بالبحث في المنتدى .
يمكنك أيضا استعمال تعليمات  ال SQL.
بالمناسبة لم تذكر نوع قاعدة  البيانات  التي تستعملها.


RE: التصفية حسب التحديد في dbgrid - احمد العراقي - 25-02-2020

(25-02-2020, 05:20 PM)أبو معاذ كتب : وعليكم السلام ورحمة الله وبركاته ،
هذه العملية تسمى الفلترة ، هناك العديد من المواضيع حول الفلترة فقط قم بالبحث في المنتدى .
يمكنك أيضا استعمال تعليمات  ال SQL.
بالمناسبة لم تذكر نوع قاعدة  البيانات  التي تستعملها.
شكرا اخي العزيز على الرد 
نعم اعلم بانها فلترة ولكن مشكلتي هي ليس الفلترة حسب حقل معين في الجدول وانما يقوم المستخدم بتحديد مجموعة سجلات يختارها بشكل عشوائي ومن ثم تتم الفلترة حسب ما تم اختياره من السجلات 
اما قاعدة البيانات فهي Absolute


RE: التصفية حسب التحديد في dbgrid - S.FATEH - 25-02-2020

السلام عليكم حاول باستحدام bookmark
https://delphi4arab.net/forum/showthread.php?tid=2177


RE: التصفية حسب التحديد في dbgrid - احمد العراقي - 25-02-2020

(25-02-2020, 06:44 PM)S.FATEH كتب : السلام عليكم حاول باستحدام bookmark
https://delphi4arab.net/forum/showthread.php?tid=2177
وعليكم السلام و رحمة الله
شكرا اخي على الرد ولكن الموضوع الذي اقترحته لي يعطي طريقة للنسخ و الحذف فقط وليس التصفية اذا ممكن كود التصفية من فضلك واكون لك شاكرا


RE: التصفية حسب التحديد في dbgrid - لؤي - 26-02-2020

السلام عليكم

محاولة تحتاج إلى تعديل :
كود :
str:=''; search:=''; for i := 0 to DBGrid1.SelectedRows.Count - 1 do begin   str := 'Field_Name' + ' LIKE '+ QuotedStr(DBGrid1.SelectedRows[i];+'%') ; if i=0 then search:= str else   search:= str +' OR '+ search; End;   DataModule.Table.Filtered := False;   DataModule.Table.Filter := search;   DataModule.Table.Filtered := True



RE: التصفية حسب التحديد في dbgrid - احمد العراقي - 28-02-2020

(26-02-2020, 10:17 AM)لؤي كتب : السلام عليكم

محاولة تحتاج إلى تعديل :
كود :
str:=''; search:=''; for i := 0 to DBGrid1.SelectedRows.Count - 1 do begin   str := 'Field_Name' + ' LIKE '+ QuotedStr(DBGrid1.SelectedRows[i];+'%') ; if i=0 then search:= str else   search:= str +' OR '+ search; End;   DataModule.Table.Filtered := False;   DataModule.Table.Filter := search;   DataModule.Table.Filtered := True
وعليكم السلام ورحمة الله
اخي العزيز ياحيذا لو تعطيني كود يعمل فالكود لا يعمل حتى مع بعض التعديلات التي اجريتها له طبعا خبرتي متواضعة لذلك لم انجح وشكرا


RE: التصفية حسب التحديد في dbgrid - لؤي - 01-03-2020

السلام عليكم
رسالة الخطأ ؟؟
أرفق محاولتك.


RE: التصفية حسب التحديد في dbgrid - ghostdz - 01-03-2020

(25-02-2020, 11:28 AM)احمد العراقي كتب : السلام عليكم اعضاء و مشرفي المنتدى الاعزاء
لدي سؤال و هو كيف يتم تصفية جدول حسب ما تم تحديده من dbgrid اي يقوم المستخدم بتحديد عدة سجلات من dbgrid ومن ثم عند الضغط على الزر يتم اخفاء جميع السجلات و ابقاء السجلات التي تم تحديدها فقط طبعا خاصية MultiSelect =true الموجودة في option
وشكرا

جرب هذا الكود ، لكن عليك تغيير IndexFieldName حسب قاعدة بياناتك

PHP كود :
procedure TForm2.FilterBtnClick(Sender: TObject);
var
  I: Integer;
  Filter, IndexFieldName: string;
  Bookmark: TBookmark;
begin
  IndexFieldName
:= 'Id';
  Filter:= '';
  Query.DisableControls;
  try
    for I:= 0 to DBGrid1.SelectedRows.Count - 1 do
    begin
      Query
.GotoBookmark(DBGrid1.SelectedRows[I]);
      Filter:= Filter + '(' + IndexFieldName + '=' + Query.FieldByName(IndexFieldName).AsString + ') ';
      if I < (DBGrid1.SelectedRows.Count - 1) then
        Filter
:= Filter + ' OR ';
    end;
    Query.Filter:= Filter;
    Query.Filtered:= True;

  finally
    EmployeeQuery.EnableControls;
  end;
end; 



RE: التصفية حسب التحديد في dbgrid - S.FATEH - 01-03-2020

السلام عليكم 
عدل عليها بما يناسبك
  • dmt.client هي الـ DataSet الخاصة بك.
  • dbgClients هي DBGrid الخاصة بك.
PHP كود :
procedure TfrmListClient.ToolButton1Click(Sender: TObject);
var
  I: Integer;
  FilterStr, FieldName: string;
begin
  FieldName 
:= dmt.Client.Fields[0].FieldName;
  FilterStr := FieldName + ' = -1';
  for I := 0 to dbgClients.SelectedRows.Count - 1 do
  begin
    dmt
.Client.GotoBookmark(dbgClients.SelectedRows[i]);
    FilterStr := FilterStr +' or '+ FieldName + ' = ' + dmt.Client.Fields[0].AsString;
  end;
  dmt.Client.Filter := FilterStr;
  dmt.Client.Filtered := True;
end; 

نسخة اخرى في حالة لم يكن هناك تحديد لا يفعل شيئ

PHP كود :
var
  I: Integer;
  FilterStr, FieldName: string;
begin
  FieldName 
:= dmt.Client.Fields[0].FieldName;
  FilterStr := FieldName + ' = -1';
  if dbgClients.SelectedRows.Count > 0 then
  begin
    
for I := 0 to dbgClients.SelectedRows.Count - 1 do
    begin
      dmt
.Client.GotoBookmark(dbgClients.SelectedRows[i]);
      FilterStr := FilterStr +' or '+ FieldName + ' = ' + dmt.Client.Fields[0].AsString
    end
;
  end else
    FilterStr := FilterStr + ' or ' + FieldName + ' like ' + QuotedStr('%');
  dmt.Client.Filter := FilterStr;
  dmt.Client.Filtered := True;