代码如下:
procedure TForm1.ShowDataInList;
var
i:integer;
TotalRecord:integer;
TempItem:TListItem;begin
  with Form1.ADOQuery3 do
  begin
    TotalRecord:=Recordcount-1;
    if TotalRecord>=0 then
    begin
    form1.ListViewData.Items.Clear;
      for i:=0 to TotalRecord do
        begin
          with form1.ListViewData do
          begin
            TempItem:=Items.Add;
            TempItem.Caption:=Fields[1].AsString ;
            TempItem.SubItems.Add(Fields[2].AsString);
            TempItem.SubItems.Add(Fields[3].AsString+Fields[4].AsString);
            TempItem.SubItems.Add(Fields[5].AsString+Fields[6].AsString);
            TempItem.SubItems.Add(DateToStr(RecordSet.Fields.Item[8].Value));
            TempItem.SubItems.Add(TimeToStr(RecordSet.Fields.Item[9].Value));
            end;
          RecordSet.MoveNext;
        end;
    end;
  end;
end;显示数据时,listview总是在第二行加一个空行,调试时显示listview.item.count居然在第一次使用listview.item.add方法后直接从0变到2,以后倒是一个一个的加,是不是我的listview设置有问题?请各位指教。急!!!!

解决方案 »

  1.   

    为什么不直接使用Eof属性,把你的代码这样写:with Self.ADOQuery3 do 
      if TotalRecord>0 then
      begin
        TotalRecord:=RecordCount-1;
        Self.ListViewData.Clear;
        First;
        while not Eof do 
        begin
          //你的添家Item的代码
          Next;
        end;
      end;
    end;
      

  2.   

    我看数据读出没什么问题,可能是LV的一个BUG,试试再说
      

  3.   

    procedure TForm1.ShowDataInList;
    var
    i:integer;
    TotalRecord:integer;
    TempItem:TListItem;begin
      with Form1.ADOQuery3 do
      begin
        TotalRecord:=Recordcount-1;
        if TotalRecord>=0 then
        begin
        form1.ListViewData.Items.Clear;
          for i:=0 to TotalRecord do
            begin
              with form1.ListViewData do
              begin
                TempItem:=Items.Add;
                TempItem.Caption:=Fields[1].AsString ;
                TempItem.SubItems.Add(Fields[2].AsString);
                TempItem.SubItems.Add(Fields[3].AsString+Fields[4].AsString);
                TempItem.SubItems.Add(Fields[5].AsString+Fields[6].AsString);
                TempItem.SubItems.Add(DateToStr(RecordSet.Fields.Item[8].Value));
                TempItem.SubItems.Add(TimeToStr(RecordSet.Fields.Item[9].Value));
                end;
               ///action here;
               Next;
            end;
        end;
      end;
    end;
      

  4.   

    试过,LV没问题
    加一句:
    Form1.ADOQuery3.first;RecordSet.MoveNext;  改-》 Form1.ADOQuery3.next  试试
      

  5.   

    哦?RecordSet.MoveNext和Next有什么不同吗?
      

  6.   

    To JPYC  First如果保证是刚打开记录集的情况下是没有必要加的!
      偶还是看不出来上面两个方法有什么区别(可惜手头没有D)!
      

  7.   

    这是偶的一部分代码, 管用,  
      Clear;
      FRecordset.MoveFirst;
      while not FRecordset.EOF do begin
        Selected := Items.Add;
        Selected.Caption := FRecordset.Fields[0].Value;
        for i := 1 to FRecordset.Fields.Count - 1 do
          Selected.SubItems.Add(FRecordset.Fields[i].Value);
        FRecordset.MoveNext;
      end;很可能是其他地方出了问题。
      

  8.   

    加一句:
    Form1.ADOQuery3.first;
    我也试过了,只要更改
    RecordSet.MoveNext;  改-> Form1.ADOQuery3.next  
    就可以了,没有楼主说的那个问题呀
      

  9.   

    今天请了一个人给看了一下,原来我无意在listview的Item属性上加了一个空白项。所以总是有个空项。耽误大家时间了,晚上给分,来者有分。
      

  10.   

    今天请了一个人给看了一下,原来我无意在listview的Item属性上加了一个空白项。所以总是有个空项。初学Delphi ,耽误大家时间了,晚上给分,来者有分。
      

  11.   

    Item都动态添加了 就不用再在设计期写了吧:-)快乐接分