我查了好几本书都没找到关与介绍ListView用法的资料。
关于ListView,我只知道生成,其他的一点也不知道。
我现在输出一个数据库查询出的表,不想用DBGrid,想用ListView。
怎么办?
求教 了!!!

解决方案 »

  1.   

    http://www.netgocn.com/TitList.htm
    在Windoes编程中列表视图(ListView)是一个通用控件,当将其样式设为Report时,系统将自动为它加上一个表头控件(以下简称表头),但通常我们不能直接对这个表头控件进行操作。同样Delphi的TListView组件也没有为我们提供可以直接对该表头进行控制的方法,这篇文章介绍一种通过自定义组件的方法,对Delphi的TListView组件进行功能增强,做一个通用的列表视图但是它增加了以下功能:1)    增加一个可以从外部调用的排序方法,当视图的显示样式为Report时,点击各列的表头按钮可按其列值进行排序;2)    点击各列的表头按钮进行排序的同时在视图的表头上按排序方向绘制一个箭头,其效果类似Outlook Express;3)    增加视图表头的字体属性;4)    增加一个背景图属性。通过代码编写增强了Delphi通用列表视图的功能,但它仍是一个通用的列表视图控件,效果如下图。   自定义组件的基本步骤请参见有关文章,但是在此我们选择的基类是TListView,下面我们直接从Delphi自动生成的组件单元文件的数据类型定义部份开始(本文代码在Delphi 4.0下完成)。一、将Delphi自动生成的单元文件的数据类型定义部份修改为:  typeTListView1 = class(TListView)private  FaToz :Boolean;  FoldCol :Integer;  FPicture :TPicture;  FHeaderFont:TFont;  procedure SetHeaderFont(Value:TFont);  procedure SetHeaderStyle(phd:PHDNotify);  procedure DrawHeaderItem(pDS:PDrawItemStruct);  procedure SetPicture(Value: TPicture);  procedure PictureChanged(Sender: TObject);  procedure LVCustomDraw(Sender:TCustomListView;const ARect:TRect;var DefaultDraw:Boolean);  procedure DrawBack;protected  procedure WndProc(var Message : TMessage); override;public  constructor Create(AOwner: TComponent); override;  destructor Destroy; override;  procedure SortColumn(Column: TListColumn);published  property BackPicture: TPicture read FPicture write SetPicture;  property HeaderFont: TFont read FHeaderFont write SetHeaderFont;end;
      

  2.   

    将数据库的查询记录写成variant数组,然后分解转换,然后用listview.items.add();一条一条增加。
      

  3.   

    var
    List:TListView;
    begin
        List:=listview.items.add();
    while not Table.Eof do
        begin  
           List.Item.AddString(Table.FieldValues['字段名1']),
           List.Item.AddString(Table.FieldValues['字段名2']),
           Table.Next 
        end
    end很久没有写程序,也不知道对不对,就当时抛砖引玉的作用吧。
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;type TLine = array[0..4] of string;type
      TForm1 = class(TForm)
        ListView1: TListView;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private 宣言 }
      public
        procedure Add_Columns(ColName: String; ColWidth: integer);
        procedure Write_ListItem(LineArray: TLine);
        procedure Init_ListView;
        { Public 宣言 }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.Init_ListView;  //初始Header
    var i: integer;
    begin
      ListView1.Columns.BeginUpdate;
      ListView1.Columns.Clear;
      for i:=0 to 4 do begin
        Add_Columns('column'+IntToStr(i), 50);
      end;
      ListView1.Columns.EndUpdate;
    end;procedure TForm1.Add_Columns(ColName: String; ColWidth: integer);//Add a column
    var
      ListCol: TListColumn;
    begin
      ListCol := ListView1.Columns.Add;
      ListCol.Caption := ColName;
      ListCol.Width := ColWidth;
    end;procedure TForm1.Write_ListItem(LineArray:TLine); //Insert a row
    var
      ListItem: TListItem;
      j: integer;
    begin
      ListItem := ListView1.Items.Add;
      ListItem.Caption := LineArray[0];
      for j := 1 to 4 do begin
        ListItem.SubItems.Add(LineArray[j]);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    const line: TLine = ('1','2','3','4','5');
    begin
      ListView1.ViewStyle := vsReport;
      ListView1.RowSelect := true;
      Init_ListView;  //Header  ListView1.Items.BeginUpdate;
      Write_ListItem(line); //(注:此処只是一行、自己将数据库的查询记录循環)
      ListView1.Items.EndUpdate;
    end;end.