listview内容如下:
---------------------------------------
1   DUM2   3      Y    2
2   DUM1   5.3    W    2.3
3   DUM3   4.6    W    2.05
4   DUM2   3.56   Y    2.5
5   DUM1   7.4    Y    1.5
6   DUM2   3.56   Y    1.5
7   DUM2   3.56   W    1.5
8   DUM2   3      W    1.5
---------------------------------------
要求排序后为如下顺序:
---------------------------------------
2   DUM1   5.3    W    2.3
5   DUM1   7.4    Y    1.5
1   DUM2   3      Y    2
8   DUM2   3      W    1.5
6   DUM2   3.56   Y    1.5
4   DUM2   3.56   Y    2.5
7   DUM2   3.56   W    1.5
3   DUM3   4.6    W    2.05
---------------------------------------即分别按照第2列到第5列排序(第1列序号不用排),类似数据表中的"order by"排序(其中第4列按先Y后W的顺序),求解排序方法!!!

解决方案 »

  1.   

    var ColumnToSort: Integer;procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn);begin
      ColumnToSort := Column.Index;
      (Sender as TCustomListView).AlphaSort;
    end;
    procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
    var
      ix: Integer;
    begin
      if ColumnToSort = 0 then
        Compare := CompareText(Item1.Caption,Item2.Caption)
      else begin
       ix := ColumnToSort - 1;
       Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
      end;end;
      

  2.   

    hansome的是对的,呵呵,来晚了。
      

  3.   

    实在要做那就硬来啦,用数组把该列全部存放,然后再作排序,在循环给listview赋值。但是效率可想而知了,本身delphi中listview显示速度已经够慢的了,再这么折腾会很惨(记录数>1500).
    否则,我想不出有什么好办法,LISTVIEW应该不支持楼主那样的思想