怎样在TsGrid中实现,单击表头,使数据集按其排序
解决方案 »
- 从外界控制Panel透明(不通过继承)
- 没分了,再请教下如何禁止程序二次启动?
- Tstream和tbytes
- 一个关于QReport的问题,请熟悉QReport的朋友帮忙看一看!
- 那位同仁能提供DELPHI1.0 不胜感激!200分全给,如果想要还可加分
- [求助]dll的注册和运行异常~
- 工作需要从BCB转到DELPHI,问题非常菜,哥哥姐姐帮帮忙
- 本人初学DELPHI(不过有Pascal语言基础及面向对象的理论基础),请DX推荐合适电子版的学习资料?
- 大批量数据导入Excel,如何加快速度
- 请问Dbedit可不可以限制输入的内容?
- Re:***
- 急!急!急!关于DBGrid控件使用的一个小问题
procedure Tform1.SortQuery(column:TColumn);
var
SqlStr,myFieldName,TempStr: string;
OrderPos: integer;
SavedParams: TParams;
begin
if not(Column.Field.FieldKind in [fklookup,fkdata]) then
exit;
if column.Field.FieldKind = fkdata then
myFieldName := UpperCase(column.Field.FieldName)
else
myFieldName := UpperCase(column.Field.KeyFields);
while Pos(myFieldName,'')<>0 do
myFieldName := Copy(myFieldName,1,pos(myFieldName,'')-1) +
','+Copy(myFieldName,Pos(myFieldName,'')+1,100);
with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
begin
SqlStr := UpperCase(SQL.Text);
if ParamCount > 0 then
begin
SavedParams := TParams.Create;
SavedParams.Assign(Params);
end;
OrderPos := pos('ORDER',SqlStr);
if (OrderPos = 0) or (pos(myFieldName,copy(SqlStr,OrderPos,100)) = 0) then
TempStr := ' order by ' + myFieldName + ' Asc'
else
if pos('Asc',SqlStr) = 0 then
TempStr := ' order by ' + myFieldName + ' Asc'
else
TempStr := ' order by ' + myFieldName + ' Desc';
if OrderPos <> 0 then
SqlStr := copy(SqlStr,1,OrderPos - 1);
SqlStr := SqlStr + TempStr;
Active := False;
SQL.Clear;
SQL.Text := SqlStr;
if ParamCount > 0 then
begin
Params.AssignValues(SavedParams);
SavedParams.Free;
end;
Prepare;
Open;
end;
end;