我的代码如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
   with ADOQuery1 do
     begin
        close;
        sql.Clear;
        sql.Add('select * from book');
        open;      //  ListView1.Items.Clear;
        while not eof do
          begin
             with ListView1.Items.Add do
               begin
                 caption:=fieldbyname('图书编号').AsString;
                 subitems.Add(fieldbyname('图书名称').AsString);
                 subitems.Add(fieldbyname('作者').AsString);
                 subitems.Add(fieldbyname('出版社').asstring);
               end;
              next;
          end;
        close;
     end;end;运行结果:横着只显示1  2  3  4   5   6   7   8  9  10(我的book表中有10条记录,图书编号是自增的),而且还显示到末尾的时候还换行.请问为什么会这样?
我要的结果是第一行显示字段名,下面显示对应的数据?
请问我该如果做?

解决方案 »

  1.   

    ...
    listview1.Items.BeginUpdate;
      while not qu_list.Eof do
        begin
          with listview1 do
            begin
              tempItem := Items.Add;
              tempItem.Caption := qu_list.fieldbyname('name').AsString;
              tempItem.SubItems.Add(qu_list.fieldbyname('url').AsString);
              tempItem.SubItems.Add(qu_list.fieldbyname('addr').AsString);
              tempitem.SubItems.add(qu_list.Fields[0].AsString);
              tempitem.ImageIndex := cbx_playid.Items.indexof(qu_list.fieldbyname('playid').asstring);
            end;
          qu_list.Next;
        end;        
      listview1.Items.EndUpdate;
      

  2.   

    你的字段名应该显示到ListView的ListColumn.Caption上(利用fieldcount,fields[i].name依次添加),然后才是添加Item
      

  3.   

    渴死的鱼,你的代码和我的代码似乎没多大区别呀?
    蓝山,你能不能给段代码啊?就算ListColumn.Caption加上去了,那数据怎么显示啊?
    我的要么就是上面我贴的代码,要么就是死循环的代码.不知道怎么回事?
      

  4.   

    简单问题:加一行
    ListView1.viewStyle:=vsReport;
      

  5.   

    代码如下:(不知合不合你的要求)
    var
      i: integer;
      tmpColm: TListColumn;
    begin
      with self.QrReport do
      begin
        if active then close;
        open;
        for i:= 0 to FieldCount -1 do
          begin
            tmpColm := self.ListView1.Columns.Add;
            tmpcolm.Caption := Fields[i].FieldName;
          end;
        ListView1.Items.Clear;
        while not eof do
          begin
             with ListView1.Items.Add do
               begin
                 caption:=fields[0].AsString;
                 for i:= 1 to fieldcount -1 do
                   subitems.Add(fields[i].AsString);
               end;
              next;
            end;
          close;
         end;
    end;
      

  6.   

    当然如新手所说,需要设vsReport
      

  7.   

    各位,我的代码没有问题,是我的ListView属性没有设置:
    ListView.ViewStyle:=vsReport;
    ListView.GridLines:=True;
    把我的注释语句取消掉就可以了.
      

  8.   

    嘿嘿,ListView插入数据量大的时候速度奇慢……
      

  9.   

    超过1000你就可以在Listview插入数据时从容地抽根烟了。
      

  10.   

    楼上的问题用了BeginUpdate/EndUpdata应该可以解决吧