adrqQuery := TADOQuery.Create(nil);
  I := 0;  with adrqQuery do
  try
    SQL.Clear;
    SQL.Text := '....';
    Open;
    if not IsEmpty then
    begin
      First;      
      while not Eof do
      begin
        tmpItem := lvMainFrm.Items.Add;
        tmpItem.SubItems.Add(FieldByName('METERID').AsString);
        tmpItem.SubItems.Add(FieldByName('METERTYPE').AsString);
        tmpItem.SubItems.Add(FieldByName('USERNAME').AsString);
        tmpItem.SubItems.Add(FieldByName('ADDRESS').AsString);
        tmpItem.SubItems.Add(FieldByName('TELEPHONE').AsString);
        tmpItem.SubItems.Add(FormatFloat('#0.0', FieldByName('METERBASECOLD').AsFloat));
        tmpItem.SubItems.Add(FormatFloat('#0.0', FieldByName('METERBASEHOT').AsFloat));
        I := I + 1;
        Next;
      end;
    end;
  except
    on E:Exception do
    begin
      ShowMessage('读取用户类型数据出错,出错原因是' + #13 + #10 + E.Message);
      Exit;
    end;
  end;这段代码是在ListView中显示数据,ListView的ViewStyle是vcReport,上面SQL查找的结果是有数据的,但是不知道为什么上面语句没有出错,执行完界面上却没有什么东西显示?

解决方案 »

  1.   

    Delphi(Pascal) codetmpItem := lvMainFrm.Items.Add; lvMainFrm 
    本来是空的? 新增一个根节点,貌似跟昨天的问题一样.根节点找不到兄弟节点
      

  2.   

    tmpItem.SubItems.Add(FieldByName('METERID').AsString);
    改成
    tmpItem.Caption := FieldByName('METERID').AsString;
      

  3.   

        if not IsEmpty then
        begin
          First;
          while not Eof do
          begin
            tmpItem := lvMainFrm.Items.Add;
            tmpItem.Caption := '1';
            tmpItem.SubItems.Add(FieldByName('METERID').AsString);
            tmpItem.SubItems.Add(FieldByName('METERTYPE').AsString);
            tmpItem.SubItems.Add(FieldByName('USERNAME').AsString);
            tmpItem.SubItems.Add(FieldByName('ADDRESS').AsString);
            tmpItem.SubItems.Add(FieldByName('TELEPHONE').AsString);
            tmpItem.SubItems.Add(FormatFloat('#0.0', FieldByName('METERBASECOLD').AsFloat));
            tmpItem.SubItems.Add(FormatFloat('#0.0', FieldByName('METERBASEHOT').AsFloat));        I := I + 1;
            Next;
          end;
        end;这样也不行:(
      

  4.   

    1.先双击ListView,你需要显示多少个字段,就添加多少个栏位.2.实现代码:var
      list :TListItem;
      i :Integer;
      adrqQuery:TADOQuery;
    begin
      adrqQuery := TADOQuery.Create(nil);   with adrqQuery do
      try
        Close;
        Connection:=TADOConnection;{注意此处,不知楼主你的数据库连接组件是什么名,请自行修改}
        SQL.Text='.....';
        Open;
        if Not IsEmpty then
        begin
          while Not Eof do
          begin
            if trim(Fields[0].AsString)<>'' then
            begin
              list :=ListView1.Items.Add;
              list.Caption :=Fields[0].AsString;
              for i :=1 to Fields.Count-1 do
                if  Fields.Fields[i].DataType in [ftFloat,ftInteger] then
                    list.SubItems.Append(FormatFloat('#0.0',Fields[i].AsFloat))
                else
                    list.SubItems.Append(Fields[i].AsString);
            end;
            Next;
          end;
        end;
      finally
        Close;
        Free;
      end;
    end;
      

  5.   

    在我的程序里如果先设caption属性后设subitems属性则会出错,莫名其妙,你不妨把caption属性在最后设置。
      

  6.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:Integer;
      ListItem:TListItem;
    begin
      try
        ListView1.Items.Clear;
        with ListView1 do for i:=0 to 10 do begin
          ListItem:=Items.Add;
          ListItem.Caption:= IntToStr(i);
          ListItem.SubItems.Add('第 '+IntToStr(i)+' 行');
          ListItem.SubItems.Add('第三列内容');
        end;  except
        on E:Exception do
        begin
          ShowMessage('读取用户类型数据出错,出错原因是' + #13 + #10 + E.Message);
          Exit;
        end; 
      end;
    end;procedure TForm1.ListView1Click(Sender: TObject);
    var
      i:Integer;
    begin
      for i:=0 to ListView1.Items.Count-1 Do
        If ListView1.Items[i].Selected then begin
          Edit1.Text := listview1.Items[i].Caption;  //读第i行第1列
          Edit2.Text := listview1.Items[i].SubItems.strings[0];  //读第i行第2列
          Edit3.Text := listview1.Items[i].SubItems.strings[1];  //读第i行第3列
        end;
    end;我这样试过了,
    参考资料:
    http://school.cfan.com.cn/pro/delphi/2007-10-22/1193032446d125617.shtml
      

  7.   

    你的listview控件名字呢? 假设为ListView1 if not IsEmpty then 
        begin 
          First; 
          while not Eof do 
          begin
            with ListView1.Items.Add do
            begin 
              Caption := FieldByName('METERID').AsString;
              SubItems.Add(FieldByName('METERTYPE').AsString); 
              SubItems.Add(FieldByName('USERNAME').AsString); 
              SubItems.Add(FieldByName('ADDRESS').AsString); 
              SubItems.Add(FieldByName('TELEPHONE').AsString); 
              SubItems.Add(FormatFloat('#0.0', FieldByName('METERBASECOLD').AsFloat)); 
              SubItems.Add(FormatFloat('#0.0', FieldByName('METERBASEHOT').AsFloat)); 
            end;        I := I + 1; 
            Next; 
          end; 
        end;
    这是我用过的添加方式。你试下。