كيف ارتب الجدول dbgrid في البرنامج تنازليا على قاعدة البيانات في دلفي
#1
السلام عليكم كيف ارتب الجدول dbgrid في البرنامج تنازليا على قاعدة البيانات و اضهاره على تطبيق دالفي
الرد
#2
السلام عليكم

استعمل Query
كود :
SELECT column_name, column_name FROM table_name ORDER BY column_name ASC|DESC;
الفاشلون نوعان : الأول : فكر ولم يفعل .. والآخر: فعل ولم يفكر
الرد
#3
السلام عليكم
ملاحظة هاته اول مشاركة لي اعتذر كوني لا اجيد التعامل مع الموقع و خاصة كيفية كتابة الكود و ارساله
ربما يكون مبعثر بعض الشي لكنه صحيح و شغال و هو سهل جدا.
على العموم هناك ملف مرفق يشمل الكود كاملا مع source

ترتيب DBGRID سهل جدا و دون الحاجة الى SQL
ضع الاكواد التالية في DBGRID
الكود الاول يسمح بمعرفة احداثيات الماوس حتى يتم الترتيب حسب الحقل الذي يوجد فوقه الماوس

كود :
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var pt: TGridcoord; begin pt:= DBGrid1.MouseCoord(x, y); if pt.y=0 then DBGrid1.Cursor:=crHandPoint else DBGrid1.Cursor:=crDefault; end;

الكود الثاني يسمح بالترتيب الفعلي لـ DBGRID حين الضغط على عنوان الجدول

كود :
procedure TForm1.DBGrid1TitleClick(Column: TbsColumn); {$J+} const PreviousColumnIndex : integer = 0; {$J-} begin if DBGrid1.DataSource.DataSet is TCustomADODataSet then with TCustomADODataSet(DBGrid1.DataSource.DataSet) do begin try DBGrid1.Columns[PreviousColumnIndex].title.Font.Style := DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold]; except end; Column.title.Font.Style := Column.title.Font.Style + [fsBold]; PreviousColumnIndex := Column.Index; if (Pos(Column.Field.FieldName, Sort) = 1) and (Pos(' DESC', Sort)= 0) then Sort := Column.Field.FieldName + ' DESC' else Sort := Column.Field.FieldName + ' ASC'; end; end;
ملاحظة لا يهم ما تحتويه قاعدة البيانات يمكن وضع هاته الاكواد على DBRGID evement و هو يقوم بالباقي


الملفات المرفقة
.rar   ترتيب الجدول البياني.rar (الحجم : 8.9 ك ب / التحميلات : 143)
[-] كل من 2 users say قال شكرا ل karimprog على المشاركة المفيدة
  • salmaanga, bassem_43
الرد
#4
(30-06-2015, 05:09 AM)karimprog كتب : السلام عليكم
ملاحظة هاته اول مشاركة لي اعتذر كوني لا اجيد التعامل مع الموقع و خاصة كيفية كتابة الكود و ارساله
ربما يكون  مبعثر بعض الشي لكنه صحيح و شغال و هو سهل جدا.
على العموم هناك ملف مرفق يشمل الكود كاملا مع source

ترتيب DBGRID سهل جدا و دون الحاجة الى SQL
ضع الاكواد التالية في DBGRID
الكود الاول يسمح بمعرفة احداثيات الماوس حتى يتم الترتيب حسب الحقل الذي يوجد فوقه الماوس

كود :
procedure TForm1.DBGrid1MouseMove(Sender: TObject;  Shift: TShiftState; X, Y: Integer); var  pt: TGridcoord; begin  pt:= DBGrid1.MouseCoord(x, y);  if pt.y=0 then    DBGrid1.Cursor:=crHandPoint  else    DBGrid1.Cursor:=crDefault; end;

الكود الثاني يسمح بالترتيب الفعلي لـ DBGRID حين الضغط على عنوان الجدول

كود :
procedure TForm1.DBGrid1TitleClick(Column: TbsColumn); {$J+} const PreviousColumnIndex : integer = 0; {$J-} begin  if DBGrid1.DataSource.DataSet is TCustomADODataSet then  with TCustomADODataSet(DBGrid1.DataSource.DataSet) do  begin    try      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];   except    end;    Column.title.Font.Style :=    Column.title.Font.Style + [fsBold];    PreviousColumnIndex := Column.Index;    if (Pos(Column.Field.FieldName, Sort) = 1)    and (Pos(' DESC', Sort)= 0) then      Sort := Column.Field.FieldName + ' DESC'    else      Sort := Column.Field.FieldName + ' ASC';  end; end;
ملاحظة لا يهم ما تحتويه قاعدة البيانات يمكن وضع هاته الاكواد على DBRGID evement و هو يقوم بالباقي

هذا الكود يعمل في دلفي 7 و لكن لا يعمل في XE 10 .1  ما الحل
[-] كل من 2 users say قال شكرا ل format82 على المشاركة المفيدة
  • sami_altomi, rm31
الرد
#5
الحمد لله تم تعديل الكود حيث يعمل الان في XE 10.1
هذا هو الكود حتي يستفيد منه الجميع 
كود :
{$J+} const PreviousColumnIndex : integer = 0; {$J-} begin  if DBGrid1.DataSource.DataSet is TCustomADODataSet then  with TCustomADODataSet(DBGrid1.DataSource.DataSet) do  begin    try      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=      DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];    except    end;    Column.title.Font.Style :=    Column.title.Font.Style + [fsBold];    PreviousColumnIndex := Column.Index; if (Pos (WideString (Column.Field.FieldName), Sort) = 1) and (Pos (WideString ('DESC'), Sort) = 0) then      Sort := Column.Field.FieldName + ' DESC'    else      Sort := Column.Field.FieldName + ' ASC';  end;
[-] كل من 2 users say قال شكرا ل format82 على المشاركة المفيدة
  • sami_altomi, rm31
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم