数据库操作,结果用ListView显示
用户想点击某个字段名,按照字段排序,请问该怎么做
第三方控件也可以推荐一下

解决方案 »

  1.   

    ListView的排序网上还比较多
    http://www.graphics.net.cn/bbs/delphi/0551/190.asp
      

  2.   

    试下在OnColumnClick事件中调用如下函数
    procedure TForm1.ChangeOrder(ColumnIndex:integer);
    var
      i:integer;
      ListItem: TListItem;
      SqlFilter,SqlOrder,SCState:String;
      ADOQueryDB : TADOQuery;
    begin
      Case ColumnIndex of
        0: SqlOrder:='field1name';
        1: SqlOrder:='field2name';
        2: SqlOrder:='field3name';
      end;
      ListView1.Clear;
      with ListView1 do
      begin
        Parent := Self;
        if Columns[ColumnIndex].ImageIndex=0 then begin
          Columns[ColumnIndex].ImageIndex:=1;
          SCState:=' DESC ' ;
        end
        else begin
          Columns[ColumnIndex].ImageIndex:=0;
          SCState:=' ASC ';
        end;
        for i:=0 to Columns.Count-1 do
           if (Columns[i].ImageIndex>-1) and (i<>ColumnIndex) then Columns[i].ImageIndex:=-1;
        ADOQueryDB := TADOQuery.Create(nil);
        ADOQueryDB.Connection :=dmDBConnection.DB;
        with ADOQueryDB do
        begin
          close;
          sql.Clear;
          sql.Add('select field1name, field2name, field3name  from tableorder by '+SqlOrder+ SCState);
          try
            Open;
            i:=0;
            while not eof do
            begin
              ListItem := Items.Add;
              Listitem.Caption :=FieldValues['field1name'];
              ListItem.SubItems.Add(FieldByName('field2name').AsString;
              ListItem.SubItems.Add(FieldByName('field3name').AsString;
              i:=i+1;
              Next;
            end;
          finally
            close;
          end;
        end;
        ADOQueryDB.Free;
      end;
    end;