我从数据库中取出大量数据往LISTVIEW中填入时速度很慢,有没有快速填入数据的办法?

解决方案 »

  1.   

    var
      AfterScroll,BeforeScroll: TdatasetnotifyEvent;//好像是这个 机器上没delphi记不清listview.items.beginupdate;
    try
      dataset.disablecontrol;
      try
          afterscroll :=dataset.afterscroll;
          beforescroll :=dataset.beforescroll;    
          dataset.afterscroll :=nil;
          dataset.beforescroll :=nil;
        try
          while not dataset.eof do
          begin
            dataset.first;
            with listview.items.add do
            begin
              caption := ....
              subitems.add('...');
              ...
            end;
            dataset.next;
          end;
        finally
          dataset.afterscroll :=afterscroll;
          dataset.beforescroll :=beforescroll;
        end;
      finally
        dataset.enablecontrol;
      end;
    finally
      listview.items.endupdate;
    end;在达不到你的要求就换组件吧
      

  2.   

    ListView这个控件本身不适合用于大数据量的场合,换控件吧
      

  3.   

    可以用Virtual ListView的方式,但数据要自己管理。我用的是BCB,有例子:
    C:\Program Files\Borland\CBuilder6\Examples\VirtualListView
      

  4.   

    >回复人: myy() ( ) 信誉:100  2003-04-10 00:38:00  得分:0 
    >可以用Virtual ListView的方式,但数据要自己管理。
    >
    >我用的是BCB,有例子:
    >C:\Program Files\Borland\CBuilder6\Examples\VirtualListViewDelphi下也有这个例子,同名。
    不过,我自己仿照这个例子写的程序,ListView不停的刷新和闪烁,不晓得是不是和我的Columns是动态生成的有关?
      

  5.   

    运行时生成listView,填完后才显示出来
      

  6.   

    在你的程序段两端添加:
    ListView.BeginUpdate;
    ......
    ListView.EndUpdate;
    在这两句之间的所有改动将不会触发ListView的重绘,因而消除了闪烁并提高了更新速度。
      

  7.   

    偶搞定了,楼主,偶建议你让ListView工作在Virtual 状态。速度的改进是很明显的。
    我有一个4000记录的显示,原来花2分40秒,现在缩短到30秒,如果改进数据库结构,可能5、6秒就能显示出来。