我想用TListView代替DBGrid做数据界面,请问怎样实现点击其Title对进行TListView排序?

解决方案 »

  1.   

    这样的例子网上很多吧?
    Google找找了http://lysoft.7u7.net
      

  2.   

    自己看看,应该少作修改就能用了。它自己的是对字符串的排序,要是数字,就要这样
    function TFrmconverter.CompareValue(s1,s2:real):integer;//升序
    begin
         if s1 > s2 then result:=1
         else result:=0;
    end;
    procedure TFrmconverter.viewFileColumnClick(Sender: TObject;
      Column: TListColumn);
    begin
         nSortCol := Column.Index;
         Viewfile.AlphaSort;
    end;procedure TFrmconverter.viewFileCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    var
         RR1,RR2:Real;
    begin
         if nSortCol = 0 then
         Compare := CompareStr (Item1.Caption, Item2.Caption);//自带的对字符串的排序
         //else
         //Compare := CompareStr (Item1.SubItems [nSortCol - 1],
         //                        Item2.SubItems [nSortCol - 1]);
         if (nSortCol=3) or (nSortCol=5 )or (nSortCol=6) or (nSortCol=11) then //!@选择对应的数字列项
         begin
               if trim(item1.SubItems[nsortcol-1])='' then RR1:=0
                  else RR1:=strtofloat(trim(copy(item1.SubItems[nsortcol-1],1,length(item1.SubItems[nsortcol-1])-2)));//去掉多余的后两位字符
               if trim(item2.SubItems[nsortcol-1])='' then RR2:=0
                  else RR2:=strtofloat(trim(copy(item2.SubItems[nsortcol-1],1,length(item2.SubItems[nsortcol-1])-2)));
              //升序
                  compare:=CompareValue(RR1,RR2)
         end;end;
      

  3.   

    设置排序调用ListView.AlphaSort;函数
    在OnCompare事件里写代码,判断Item1,Item2的比较结果,比较Item1和Item2,设置compare的值
      

  4.   

    procedure Tfrmversion.listversionColumnClick(Sender: TObject;
      Column: TListColumn);
    begin
        nSortCol := Column.Index;
      Listversion.AlphaSort;
    end;
    procedure Tfrmversion.listversionCompare(Sender: TObject; Item1,
      Item2: TListItem; Data: Integer; var Compare: Integer);
    begin
       If nSortCol = 0 then
        Compare := CompareStr (Item1.Caption, Item2.Caption)
      Else
         Compare := CompareStr (Item1.SubItems [nSortCol - 1],
      Item2.SubItems [nSortCol - 1]);
    end;