Delphi简单函数实现Dbgrid多列排序,分优先级别

来源:互联网 发布:淘宝首页图片轮播 编辑:程序博客网 时间:2024/05/21 10:47

{
韩瑞臣;
将该函数放在DBgrid的TitleClick事件里面,temp是该Dbgrid对应的数据集控件,Column是点击事件中的

参数;
}
procedure Tf_exchlc.ClickTitle(Temp:TADOQuery; Column: TColumnEh);
var
  s : string;
  mark : Pointer;
begin
  mark := Temp.GetBookmark;
  if Temp.Active then
   begin
       case Column.Tag of
       0 :
         begin
           if (pos(Column.Title.Caption,Temp.Sort) < 1) or (Temp.Sort = '') then
             begin
               if Temp.Sort <> '' then
                 Temp.Sort := Temp.Sort + ',' +Column.FieldName+' ASC'
               else
                 Temp.Sort := Column.FieldName+' ASC';
             end
           else
           begin
               Temp.Sort := Temp.Sort + ',' +Column.FieldName+' ASC';
           end;
           s:= Trim(Column.Title.Caption);
           if (Pos('▽',s)>0) or (Pos('△',s)>0) then
             s:=Copy(s,1,Length(s)-2);
           Column.Title.Caption := Format('%s △', [Trim(s)]);
           Column.Font.Color := $00004000;
           Column.Tag:=1;
         end;
       1 :
         begin
           if (pos(Column.Title.Caption,Temp.Sort) < 0) or (Temp.Sort = '') then
             begin
               if Temp.Sort <> '' then
                 Temp.Sort := Temp.Sort + ',' +column.FieldName+' DESC'
               else
                 Temp.Sort := column.FieldName+' DESC';
             end
           else
           begin
               Temp.Sort := ReplaceString(Temp.Sort, Column.FieldName+' ASC',

column.FieldName+' DESC')
           end;
           s:= Trim(Column.Title.Caption);
           if (Pos('▽',s)>0) or (Pos('△',s)>0) then
             s:=Copy(s,1,Length(s)-2);
           Column.Title.Caption := Format('%s ▽', [Trim(s)]);
           Column.Font.Color := clNavy;
           Column.Tag:=2;
         end;
       2 :
         begin
           Temp.Sort := ReplaceString(Temp.Sort, column.FieldName+' DESC', '');
           s:= Trim(Column.Title.Caption);
           if (Pos('▽',s)>0) or (Pos('△',s)>0) then
             s:=Copy(s,1,Length(s)-2);
           Column.Title.Caption := Format('%s', [Trim(s)]);
           Column.Font.Color := clBlack;
           Column.Tag:=0;
         end;
       end;
   end;
   Temp.GotoBookmark(mark);
end;


function ReplaceString(Source, FromText, ToText: string ): string;
var
  I: integer;
  tempString : string;
begin
   for I := 1 to length(Source) do
   begin
     tempString := Copy(Source, I, length(FromText));
     if TempString = FromText then
     begin
       delete(Source, I, Length(FromText));
       insert(ToText,Source , I);
     end;
   end;
   if ToText = '' then
   begin
     FromText := ',,';
     ToText := ',';
     for I := 1 to length(Source) do
     begin
       tempString := Copy(Source, I, length(FromText));
       if TempString = FromText then
       begin
         delete(Source, I, Length(FromText));
         insert(ToText,Source , I);
       end;
     end;
     tempString := Copy(Source, length(Source), 1);
     if tempString = ',' then Source := Copy(Source, 1, length(Source)-1);
     tempString := Copy(Source, 1, 1);
     if tempString = ',' then Source := Copy(Source, 2, length(Source)-1);
   end;
   Result := Source;
end;