PDA

View Full Version : sort dbgrid



baran_2005
یک شنبه 10 آبان 1388, 11:20 صبح
سلام به همه دوستان
من برای sort dbgrid در برنامه یک تابع دارم که در ontitleclick هر کدام از grid ها فراخوانی می کنم و از دستور order by در sql و یا dataset نمی خواهم استفاده کنم . تا حالا مشکلی نداشتم الان که در dll قرارش دادم دچار مشکل شدم . ایا دوستان می تونند کد رو به گونه ای تغییر بدهند که در dll قابل استفاده باشد .

procedure Sort_Grid(Column: TColumn);
var
andstr:string;
i:integer;
begin
try
if Column.Field.FieldKind<>fkData then exit;
andstr:='';
if (Column.Field.DataSet.ClassNameIs ('tadoquery')=true) then
begin
if tadoquery(Column.Field.DataSet ).sort='' then
andstr:=''
else
andstr:=',';
if KeyDataToShiftState(1)=[ssctrl] then
begin
tadoquery(Column.Field.DataSet ).sort:=tadoquery(Column.Field.DataSet ).sort+andstr+Column.FieldName;
Column.Title.Font.Color:=clyellow;
end;
if KeyDataToShiftState(1)=[] then
begin
for i:=0 to TDBGrid(Column.Grid ).Columns.Count-1 do
TDBGrid(Column.Grid ).Columns[i].Title.Font.Color:=clWhite;
Column.Title.Font.Color:=clyellow;
tadoquery(Column.Field.DataSet ).sort:=Column.FieldName;
end;
if KeyDataToShiftState(1)=[ssctrl,ssshift] then
begin
tadoquery(Column.Field.DataSet ).sort:= tadoquery(Column.Field.DataSet ).sort+andstr+Column.FieldName+' DESC';
Column.Title.Font.Color:=$000A71FC;
end;
if KeyDataToShiftState(1)=[ssshift] then
begin
for i:=0 to TDBGrid(Column.Grid ).Columns.Count-1 do
(Column.Grid as TDBGrid).Columns[i].Title.Font.Color:=clWhite;
Column.Title.Font.Color:=$001D9DE2;
tadoquery(Column.Field.DataSet).sort:=Column.Field Name+' DESC';
end;
end;
if KeyDataToShiftState(1)=[ssctrl] then
except on e:exception do
ShowMessage (e.Message );
end;
end;

Mahmood_M
یک شنبه 10 آبان 1388, 12:22 عصر
الان که در dll قرارش دادم دچار مشکل شدم
چه مشکلی پیش میاد ؟ آیا DLL کامپایل میشه یا در زمان کامپایل مشکل پیش میاد ؟
شاید مشکل از نحوه ی تعریف تابع و یا فراخوانی اون باشه ...

به هر حال جواب به این سئوال نیازمند توضیح بیشتری هست ...

...

baran_2005
یک شنبه 10 آبان 1388, 16:52 عصر
با تشکر از شما دوست عزیز
مشکل این بود که در زمان فراخوانی هیچ عملی را انجام نمی داد . من نمی خواستم به ورودی تابع چیزی اضافه کنم اما در نهایت با اضافه کردن grid در ورودی و تغیر ان به صورت زیر مشکل حل شد .
procedure Sort_Grid(Column: TColumn;grid:tsmdbgrid);stdcall;
var
andstr:string;
i:integer;
begin
try
if Column.Field.FieldKind<>fkData then exit;
andstr:='';
if (Column.Field.DataSet.ClassNameIs ('tadoquery')=true) then
begin
if tadoquery(Column.Field.DataSet ).sort='' then
andstr:=''
else
andstr:=',';
if KeyDataToShiftState(1)=[ssctrl] then
begin
tadoquery(Column.Field.DataSet ).sort:=tadoquery(Column.Field.DataSet ).sort+andstr+Column.FieldName;
Column.Title.Font.Color:=clyellow;
end;
if KeyDataToShiftState(1)=[] then
begin
for i:=0 to grid.Columns.Count -1 do
grid.Columns[i].Title.Font.Color:=clWhite;
Column.Title.Font.Color:=clyellow;
tadoquery(Column.Field.DataSet ).sort:=Column.FieldName;
end;
if KeyDataToShiftState(1)=[ssctrl,ssshift] then
begin
tadoquery(Column.Field.DataSet ).sort:= tadoquery(Column.Field.DataSet ).sort+andstr+Column.FieldName+' DESC';
Column.Title.Font.Color:=$000A71FC;
end;
if KeyDataToShiftState(1)=[ssshift] then
begin
for i:=0 to grid.Columns.Count-1 do
grid.Columns[i].Title.Font.Color:=clWhite;
Column.Title.Font.Color:=$001D9DE2;
tadoquery(Column.Field.DataSet).sort:=Column.Field Name+' DESC';
end;
end;
if KeyDataToShiftState(1)=[ssctrl] then
except on e:exception do
ShowMessage (e.Message );
end;
end;