如何从数据库中读取所有记录显示在ListView之中?(因为我不想用dbgrid,觉得界面不够好看)是用查询么?如何实现?希望高手指教!

解决方案 »

  1.   

    用ListView的Add方法,直接从DataSet里面用循环添加。
      

  2.   

    with Query1 do
    begin
      First;
      while not Eof do
      begin
        with ListView1.Items.Add do
        begin
          Caption:=FieldByName('字段名1').AsString;
          SubItems.Add(FieldByName('字段名2').AsString);
          ...
        end;
        Next;
      end;
    end;最好不用ListView.速度太慢
      

  3.   

    var
    i:integer;
    begin
    adoquery1.close;
    adoquery1.sql.clear;
    adoquery1.sql.add('select * from table');  
    adoquery1.open;
    if not adoquery1.eof then
      begin    
        adoQuery1.First;
        while (not adoQuery1.Eof) do
          begin
            with  ListView1.Items.Add do
              begin
                 Caption := adoQuery1.Fields.Fields[0].AsString;
                 for I := 1 to adoQuery1.FieldCount-1 do
                     SubItems.Add(adoQuery1.Fields.Fields[I].AsString);
               end;
            adoQuery1.Next;
       end;
    end;
    end;
      

  4.   

    从速度上来说,大量的数据转成listview的确影响很大,因此还建议你将数据根据你的显示需要分段显示或分类显示
      

  5.   

    用ListView的Add方法,直接从DataSet里面用循环添加。
    能说的清楚点吗????
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
     var Node,nodecld: TTreenode; //TreeView     str,str1:string;
    begin
    adoconnection1.ConnectionString :='Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="DRIVER=SQL Server;SERVER=(local);APP=Enterprise;WSID=EDR-LIU;DATABASE=test;Trusted_Connection=Yes"';
    Adodataset1.Connection :=adoconnection1;
    Adodataset1.CommandText :='select * from testTable1';
    adodataset1.Open ;datasource1.DataSet :=adodataset1 ;
    dbGrid1.DataSource :=datasource1;     while not adodataset1.Eof  do
          begin
            str:=adodataset1.FieldByName('c').AsString ;         str1:=adodataset1.fieldbyname('d').AsString ;
            node:=Treeview1.Items.Add(nil,str);
             nodecld:=Treeview1.Items.AddChild(node,str1);
             nodecld.ImageIndex :=0; //显示时的图片
             nodecld.SelectedIndex:=0;// 选择是的图片
            node.ImageIndex:=1;      //显示时的图片
            node.SelectedIndex:=1;  //选择时的图片
         ListView1.Items.Add.Caption:=str;      ListView1.Items[ListView1.Items.Count-1].SubItems.Add(str1);
          if str='3' then
            ListView1.Items[ListView1.Items.Count - 1].ImageIndex :=0
          else   ListView1.Items[ListView1.Items.Count - 1].ImageIndex :=2;        adodataset1.Next ;
          end;
           edit1.Text :=str;end;
      

  7.   

    query1.close;//
    query1.sql.clear;
    query1.sql.add('select * from table');
    query1.open;
    if not query1.eof then
      begin
        query1.first;
        while not query1.eof do//query1的记录条数作为循环记录数(以下一个循环是一条记录)
          begin
             with listview1.items.add do//这个应该懂吧
              begin
               listview1.items.add.caption:=query1.Fields.Fields[0].AsString;//把query1的第一个字段的值显示在listview的caption里面,
               for i:=1 to query1.FieldCount-1 do//query1.fieldcount是query1里面共有多少个字段;
                SubItems.Add(Query1.Fields.Fields[I].AsString);//把第I个字段的里的数据显示在caption之后的subitems里面;
              end;
           query1.next;
           end;
      end;
    listview的第一行的第一个数据是listview.items.item[1]caption;
    listview的第一行的第二个数据就是listview.items.item[1].subitems.strings[0];
    listview的第一行的第二个数据就是listview.items.item[1].subitems.strings[1];
    这样说你应该明白了吧,
    要看你的逻辑怎么样了,
    adoquery与query的用法都是一样的
    只是一个是用于连接远程数据库一个是用于连接本地数据库