//==============================================================================
//点击DBGrid标题栏对查询结果排序************************************************
//==============================================================================
procedure DBGridTitleOrder(Column: TColumn);
var
SQLStr, OrderFieldName, TempStr: string;
i, OrderPos: integer;
SavedParams: TParams;
begin
if not (TQuery(TDBGrid(Column.Grid).DataSource.DataSet).State in [dsBrowse]) then Exit;
SavedParams := nil;
for i:=0 to Column.Grid.FieldCount-1 do
begin
{TDBGrid(Column.Grid).Columns[i].Font.Color := clBlack;}
TDBGrid(Column.Grid).Columns[i].Title.Caption := TDBGrid(Column.Grid).Columns[i].Field.DisplayName;
end;
if not (Column.Field.FieldKind in [fkData,fkLookup]) then Exit;
if Column.Field.FieldKind=fkData
then OrderFieldName := LowerCase(Column.Field.FieldName)
else OrderFieldName := LowerCase(Column.Field.KeyFields);
while Pos(OrderFieldName,';')<>0 do OrderFieldName := copy(OrderFieldName,1,Pos(OrderFieldName,';')-1)+','+copy(OrderFieldName,Pos(OrderFieldName,';')+1,100);
with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
begin
SQLStr := LowerCase(SQL.Text);
if ParamCount>0 then
begin
SavedParams := TParams.Create;
SavedParams.Assign(Params);
end;
OrderPos := pos('order',SQLStr);
if (OrderPos=0) or (pos(OrderFieldName,copy(SQLStr,OrderPos,100))=0) then
begin
TempStr := ' order by ' + OrderFieldName + ' asc';
Column.Title.Caption := Column.Title.Caption + '(▲)';
{Column.font.Color := clRed;}
end else if pos('asc',SQLStr)=0 then
begin
TempStr := ' order by ' + OrderFieldName + ' asc';
Column.Title.Caption := Column.Title.Caption + '(▲)';
{Column.font.Color := clRed;}
end else
begin
TempStr := ' order by ' + OrderFieldName + ' desc';
Column.Title.Caption := Column.Title.Caption + '(▼)';
{Column.font.Color := clGreen;}
end;
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;
//点击DBGrid标题栏对查询结果排序************************************************
//==============================================================================
procedure DBGridTitleOrder(Column: TColumn);
var
SQLStr, OrderFieldName, TempStr: string;
i, OrderPos: integer;
SavedParams: TParams;
begin
if not (TQuery(TDBGrid(Column.Grid).DataSource.DataSet).State in [dsBrowse]) then Exit;
SavedParams := nil;
for i:=0 to Column.Grid.FieldCount-1 do
begin
{TDBGrid(Column.Grid).Columns[i].Font.Color := clBlack;}
TDBGrid(Column.Grid).Columns[i].Title.Caption := TDBGrid(Column.Grid).Columns[i].Field.DisplayName;
end;
if not (Column.Field.FieldKind in [fkData,fkLookup]) then Exit;
if Column.Field.FieldKind=fkData
then OrderFieldName := LowerCase(Column.Field.FieldName)
else OrderFieldName := LowerCase(Column.Field.KeyFields);
while Pos(OrderFieldName,';')<>0 do OrderFieldName := copy(OrderFieldName,1,Pos(OrderFieldName,';')-1)+','+copy(OrderFieldName,Pos(OrderFieldName,';')+1,100);
with TQuery(TDBGrid(Column.Grid).DataSource.DataSet) do
begin
SQLStr := LowerCase(SQL.Text);
if ParamCount>0 then
begin
SavedParams := TParams.Create;
SavedParams.Assign(Params);
end;
OrderPos := pos('order',SQLStr);
if (OrderPos=0) or (pos(OrderFieldName,copy(SQLStr,OrderPos,100))=0) then
begin
TempStr := ' order by ' + OrderFieldName + ' asc';
Column.Title.Caption := Column.Title.Caption + '(▲)';
{Column.font.Color := clRed;}
end else if pos('asc',SQLStr)=0 then
begin
TempStr := ' order by ' + OrderFieldName + ' asc';
Column.Title.Caption := Column.Title.Caption + '(▲)';
{Column.font.Color := clRed;}
end else
begin
TempStr := ' order by ' + OrderFieldName + ' desc';
Column.Title.Caption := Column.Title.Caption + '(▼)';
{Column.font.Color := clGreen;}
end;
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;
解决方案 »
- cxgridexportlin.dcu找不到
- ★★★如何能在FastReport 3.2 中动态建立多个Series的Chart,谢谢!
- 您遇到过这样的“妖怪”的事?
- 天!我要疯了,有一颗中国心,还有点良知的人,过来签个名
- 一个让我非常郁闷的问题,兄弟姐妹都来呀!!!
- 从MemoryStream中截取内容,求帮助
- linux编译报错?求大虾解释
- ado下如何实现batmove?
- 实现dbgrid显示缩进的问题。
- 怎样删除一个安装好的控件?
- 我现在寻求一个关于字符串的函数,如“f:\\fan\fa\\\fa\\\ttt\\\”,将它变成“f:\fan\fa\fa\ttt”,就是得到正确的路径!!
- 在TMemo 控件中如何动态把一个英文单词,或者汉字变色,例如"中国程序员"动态的把"国"字变成红色,如何实现
select * From table order by field desc 降序
select * from table order by field 升序
或用ADOQUERY.SORT:='F1 DESC'