各位哥哥姐姐,帮我看看listview 排序通用函数问题!
procedure AutoSort(AListView:TListView; Column: TListColumn);
var
ACaption:string;
begin
//清除上次
if FCurrentColumnIndex <> Column.Index then begin
ACaption:= Trim(AListView.Column[FCurrentColumnIndex].Caption);
if (Pos(ColumnSort_UpFlag,ACaption)>0) then
ACaption:=StringReplace(ACaption,ColumnSort_UpFlag,'',[rfReplaceAll]);
if (Pos(ColumnSort_DownFlag,ACaption)>0) then
ACaption:=StringReplace(ACaption,ColumnSort_DownFlag,'',[rfReplaceAll]);
AListView.Column[FCurrentColumnIndex].Caption:= ACaption;
end;
//更新当前
ACaption:= Trim(Column.Caption);
if (Pos(ColumnSort_UpFlag,ACaption)<1) and (Pos(ColumnSort_DownFlag,ACaption)<1) then
ACaption:= Format('%s%s',[ACaption,ColumnSort_UpFlag])
else if (Pos(ColumnSort_UpFlag,ACaption)>0) then begin
ACaption:=StringReplace(ACaption,ColumnSort_UpFlag,ColumnSort_DownFlag,[rfReplaceAll]);
end else begin
ACaption:=StringReplace(ACaption,ColumnSort_DownFlag,ColumnSort_UpFlag,[rfReplaceAll]);
end;
Column.Caption:= ACaption;
if Column.ImageIndex = 1 then begin
AListView.CustomSort(@CustSortDesc, Column.Index);
Column.ImageIndex := 2;
end else begin
AListView.CustomSort(@CustSortAsc, Column.Index);
Column.ImageIndex := 1;
end;
FCurrentColumnIndex := Column.Index;
end;
这是通用排序函数,在listview 中columnclick中调用就行。。。
AutoSort(TListView(Sender),Column);
问题是它对数字排序不正确。。。。。帮忙看看。。。谢谢了!