我现在做的一个程序,是将数据表中的内容放到ListView中显示(VsReport),比较容易实现,我将其中一个时间字段的值放到ListBox中,然后根据ListBox中点选的值,在ListView中寻找,根据我所查找的资料是用FindData方法,但是没有效果啊,然后将OwnetData设为True,ListView就没有显示了,我真的没办法,怎样才能根据字符串值在ListView中查找到,请给出实例!!!!!

解决方案 »

  1.   

    OwnetData设为True时,是ListView的Virtual方式,也就是直接处理指针类型的数据,详细用法可以看Delphi的Demo,这个时候不能使用Items.Add方法增加记录!你说的查询的方法很好解决的,遍历它就是了,假设你的日期字段建立在SubItems[1],
    for i:=0 to ListView1.Count-1 do
    begin
      if ListView1.Items[i].SubItems[1]='你的时间' then
      begin
        ListView1.ItemIndex := i;
        Break;
      end;
    end;
      

  2.   

    众所周知,ListView当记录条数上百上千的时候,加载速度非常的慢,但是如果使用了Virtual方式,那么加载的速度可以得到很大的提高,我曾经加载过4万条数据,大概只需要几秒的时间!但是缺点就是不能修改Item的Caption;
      

  3.   

    我前面试过了,在改为OwnerData=True时,ListView根本就不显示任何数据啊,能给出Virtual使用DataFind的方法吗?我的数据表会有几百万条数据啊,你的循环太慢了
      

  4.   

    那么你加载的时候是不是更加的慢呢?
    即使使用Virtual方式,几百万条数据也是需要至少分钟级别的耗时的,你又是如何加载的呢?
      

  5.   

    我是用Sql语句啊,但不是每次加载几百万行,加载时SQL很快的
      

  6.   

    而且不用Virtual方式,直接用循环,ListView不能产生联动效果
      

  7.   

    那么用遍历也一定慢不了的,我说的遍历是遍历ListView,也不是遍历数据表的!你可以测试一下!另外使用Virtual方式基本步骤就是,
    建立记录结构,
    建立记录指针,
    定义TList类型的指针列表变量,
    遍历记录集生成新的纪录指针类型数据,加入到TList,
    然后再ListView的OnData事件中加载数据!
      

  8.   

    就是你点击了一个字符串,在ListView中将寻找到相等的字符串,并将该字符串所在的行显示在可见窗口中
      

  9.   

    唉!试试这个!for i:=0 to ListView1.Count-1 do
    begin
      if ListView1.Items[i].SubItems[1]='你的时间' then
      begin
        ListView1.ItemIndex := i;
        ListView1.TopItem := ListView1.Items[i];
        Break;
      end;
    end;
      

  10.   

    TopItem是个只读变量,不能赋值
      

  11.   

    这个应该可以了:
    ==============================================================unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;type
      TForm1 = class(TForm)
        ListView1: TListView;
        Edit1: TEdit;
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var
      i: Integer;
      Item: TListItem;
    begin
      with ListView1 do
      begin
        Items.BeginUpdate;
        for i:=1 to 1000 do
        begin
          Item := Items.Add;
          Item.Caption := Format('%d', [i]);
        end;
        Items.EndUpdate;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      i, idx: Integer;
    begin
      idx := ListView1.TopItem.Index;
      ListView1.Scroll(0, -18 * idx);
      for i:=0 to ListView1.Items.Count-1 do
      begin
        if Trim(ListView1.Items[i].Caption) = (Edit1.Text) then
        begin
          ListView1.ItemIndex := i;
          Break;
        end;
        ListView1.Scroll(0, 18);
      end;
    end;end.
      

  12.   

    急聘DELPHI开发人员,3个月的项目在上海,待遇优!
    有意者请至电:021 6249 2931
    [email protected]对不起打扰了! 实在要人要的急,楼主多包涵
      

  13.   

    http://community.csdn.net/Expert/topic/3654/3654301.xml?temp=.7707331
    请看看。谢谢!