
نوشته شده توسط
mortezakiaee
در مورد مرتب کردن(sort) ستون های یه DBGrid زیاد بحث شده این یه نمونه خوب برای سورت با کلیک بر روی عنوان ستون
procedure Tmain_frm.DBGrid1TitleClick(Column: TColumn);
var i: integer;
begin
if (Column.Title.Font.Style = [fsbold]) and (Column.Title.Font.Color = clWindowText)then begin
TADOQuery(Column.Grid.DataSource.DataSet).Sort:='['+Column.FieldName+']'+' DESC' ;
for i:=0 to TDBGrid(Column.Grid).Columns.Count-1 do begin
TDBGrid(Column.Grid).Columns[i].Title.Font.Style:=[];
TDBGrid(Column.Grid).Columns[i].Title.Font.Color:= clWindowText; end;
Column.Title.Font.Style:=[fsbold];
Column.Title.Font.Color:= clred; end
else begin
TADOQuery(Column.Grid.DataSource.DataSet).Sort:='['+Column.FieldName+']' ;
for i:=0 to TDBGrid(Column.Grid).Columns.Count-1 do begin
TDBGrid(Column.Grid).Columns[i].Title.Font.Style:=[];
TDBGrid(Column.Grid).Columns[i].Title.Font.Color:= clWindowText; end;
Column.Title.Font.Style:=[fsbold]; end;
end;
پ.ن. اگه بشه یه جوری این کد رو تغییر بدیم که یه فلش هم نشون بده عالی میشه


با این کد
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; }
و این کد هم میشه
if Column.Title.Font.Color = clRed then
begin
TCustomADODataSet(DBGrid1.DataSource.DataSet).Sort := Column.Field.FieldName + ' ASC';
Column.Title.Font.Color := clBlack;
end else
begin
TCustomADODataSet(DBGrid1.DataSource.DataSet).Sort := Column.Field.FieldName + ' DESC';
Column.Title.Font.Color := clRed;
end;