var
  oSQL:TADOQuery;
  sSelect:string;
  liBook:TListItem;
begin
  oSQL:=TADOQuery.create(Application);
  oSQL.ConnectionSTring:=GetConnectionSTring;
  oSQL.CacheSize:=1000;
  sSelect:=GetNewBookQueryString;  if not OpenSQL_ADO(oSQL,sSelect,_ErrorSQL_PrintnewBookfrm_RefreshCheckBoxListView) then
    begin
      oSQL.close;
      oSQL.free;
      exit;
    end;
  lvBookList.Items.Clear;
  while not oSQL.eof do
    begin
      liBook:=lvBookList.Items.Add;
      liBook.Caption:=trim(oSQL['barcode']);
      liBook.SubItems.Add(oSQL['bookname']);
      liBook.subItems.Add(oSQL['price']);
      liBook.subItems.add(oSQL['company']);
      liBook.Checked:=true;
      oSQL.Next;
    end;
  oSQL.close;
  oSQL.free;

解决方案 »

  1.   

    listview1.items.clear;
    listview.subitems.add();
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);var
      MyRecPtr: PMyRec;
      TreeViewIndex: LongInt;
    begin
      New(MyRecPtr);
      MyRecPtr^.FName := Edit1.Text;
      MyRecPtr^.LName := Edit2.Text;
      TreeViewIndex := StrToInt(Edit3.Text);
      with TreeView1 do
      begin
        if Items.Count = 0 then
          Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr)//加入节点
        elseif (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then
          Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr);  end;
    end;TreeView1.Items.AddChildObject(TreeView1.Selected,'New Item',MyBitMap); //加入孩子
      

  3.   

    像资源管理器那样对Subitem的内容进行排序。
    最好自己来控制排序,如下所示:function CustomSortProc( Item1, Item2 : TListItem; lParam : LongInt ) : Integer; stdcall;
    begin
       if lParam >= 0 then //lParam中保存的是SubItem的Index
       begin
          result := -CompareText(Item1.SubItems.Strings[lParam], 
                     Item1.SubItems.Strings[lParam] );
       end else
          result := 0;
    end;在ListView的ColumnClick事件响应方法中输入 
        CustomSort(@CustomSortProc, Column.Index );
      

  4.   

    ListView & TreeView 的绘制:
    procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      p:trect;
    begin
    if cdsselected in state then
    begin
      listview1.Canvas.Font.Color:=clgreen;
      listview1.Canvas.brush.Color:=clred;
      p:=item.displayrect(drselectbounds);
      listview1.Canvas.FillRect(p);
      listview1.Canvas.Textout(p.Left+2,p.Top,item.Caption);
      listview1.Canvas.brush.Color:=clblue;
      listview1.Canvas.FrameRect(item.displayrect(drselectbounds));
      defaultdraw:=false;
    end;
    end;
      

  5.   

    ListView & TreeView 的绘制:
    procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      p:trect;
    begin
    if cdsselected in state then
    begin
      listview1.Canvas.Font.Color:=clgreen;
      listview1.Canvas.brush.Color:=clred;
      p:=item.displayrect(drselectbounds);
      listview1.Canvas.FillRect(p);
      listview1.Canvas.Textout(p.Left+2,p.Top,item.Caption);
      listview1.Canvas.brush.Color:=clblue;
      listview1.Canvas.FrameRect(item.displayrect(drselectbounds));
      defaultdraw:=false;
    end;
    end;
      

  6.   

    listview内容的移动排序:
    procedure TMDIChild.downBtnClick(Sender: TObject);
    Var
      ts: TListItem;
      dataid:pdatanode;
      tdc,tds1,tds2,tsc,tss1,tss2,pxsql:string;
      movid,m:integer;begin
      if rzlistview1.Selected<>nil then
      begin
        j:=rzlistview1.Items.Count;
        if j<>0 then
        begin
          ts:=rzListView1.Selected;
          rzListView1.SetFocus;
          i:=ts.Index;
          if i<j-1 then
          begin
            tsc:= rzlistview1.Items[i].Caption;
            tss1:=rzlistview1.Items[i].SubItems[0];
            tss2:=rzlistview1.Items[i].SubItems[1];
            rzlistview1.Refresh;
            rzListView1.Items[i+1].Selected:=true;
            rzListView1.SetFocus;
            tdc:=rzlistview1.Items[i+1].Caption;
            tds1:=rzlistview1.Items[i+1].SubItems[0];
            tds2:=rzlistview1.Items[i+1].SubItems[1];
            rzlistview1.Items[i+1].Caption:=tsc;
            rzlistview1.Items[i+1].SubItems[0]:=tss1;
            rzlistview1.Items[i+1].SubItems[1]:=tds2;
            rzlistview1.Items[i].Caption:=tdc;
            rzlistview1.Items[i].SubItems[0]:=tds1;
            rzlistview1.Items[i].SubItems[1]:=tss2;
          end;
        end;
        dataid:=rztreeview1.Selected.Data;
        movid:=integer(dataid.ID);
    {    Datamodule3.ADOTable2.Filtered :=true;
        Datamodule3.ADOTable2.Filter := 'sxparent='+inttostr(movid);
        Datamodule3.ADOTable2.Sort:='sxsort';
        datamodule3.ADOTable2.First;}
        pxsql:='select * from zbtable where sxparent='+inttostr(movid);
        With DataModule3.ADOQuery1 Do
        Begin
          Close;
          SQl.Clear;
          SQl.add(pxsql);
          open;
        End;
        DataModule3.ADOQuery1.Sort:='sxsort';
        for m:=0 to rzlistview1.Items.Count-1 do
        begin
          DataModule3.ADOQuery1.Locate('id',rzlistview1.Items[m].Caption,[lopartialkey]);
          datamodule3.ADOQuery1.Edit;
          datamodule3.ADOQuery1.FieldByName('sxsort').value:=strtoint(rzlistview1.Items[m].SubItems[1]);
          datamodule3.ADOQuery1.Post;
        end;
      end;
    end;
      

  7.   

    listview内容的移动排序:
    procedure TMDIChild.downBtnClick(Sender: TObject);
    Var
      ts: TListItem;
      dataid:pdatanode;
      tdc,tds1,tds2,tsc,tss1,tss2,pxsql:string;
      movid,m:integer;begin
      if rzlistview1.Selected<>nil then
      begin
        j:=rzlistview1.Items.Count;
        if j<>0 then
        begin
          ts:=rzListView1.Selected;
          rzListView1.SetFocus;
          i:=ts.Index;
          if i<j-1 then
          begin
            tsc:= rzlistview1.Items[i].Caption;
            tss1:=rzlistview1.Items[i].SubItems[0];
            tss2:=rzlistview1.Items[i].SubItems[1];
            rzlistview1.Refresh;
            rzListView1.Items[i+1].Selected:=true;
            rzListView1.SetFocus;
            tdc:=rzlistview1.Items[i+1].Caption;
            tds1:=rzlistview1.Items[i+1].SubItems[0];
            tds2:=rzlistview1.Items[i+1].SubItems[1];
            rzlistview1.Items[i+1].Caption:=tsc;
            rzlistview1.Items[i+1].SubItems[0]:=tss1;
            rzlistview1.Items[i+1].SubItems[1]:=tds2;
            rzlistview1.Items[i].Caption:=tdc;
            rzlistview1.Items[i].SubItems[0]:=tds1;
            rzlistview1.Items[i].SubItems[1]:=tss2;
          end;
        end;
        dataid:=rztreeview1.Selected.Data;
        movid:=integer(dataid.ID);
    {    Datamodule3.ADOTable2.Filtered :=true;
        Datamodule3.ADOTable2.Filter := 'sxparent='+inttostr(movid);
        Datamodule3.ADOTable2.Sort:='sxsort';
        datamodule3.ADOTable2.First;}
        pxsql:='select * from zbtable where sxparent='+inttostr(movid);
        With DataModule3.ADOQuery1 Do
        Begin
          Close;
          SQl.Clear;
          SQl.add(pxsql);
          open;
        End;
        DataModule3.ADOQuery1.Sort:='sxsort';
        for m:=0 to rzlistview1.Items.Count-1 do
        begin
          DataModule3.ADOQuery1.Locate('id',rzlistview1.Items[m].Caption,[lopartialkey]);
          datamodule3.ADOQuery1.Edit;
          datamodule3.ADOQuery1.FieldByName('sxsort').value:=strtoint(rzlistview1.Items[m].SubItems[1]);
          datamodule3.ADOQuery1.Post;
        end;
      end;
    end;
      

  8.   

    listview内容的移动排序:
    procedure TMDIChild.downBtnClick(Sender: TObject);
    Var
      ts: TListItem;
      dataid:pdatanode;
      tdc,tds1,tds2,tsc,tss1,tss2,pxsql:string;
      movid,m:integer;begin
      if rzlistview1.Selected<>nil then
      begin
        j:=rzlistview1.Items.Count;
        if j<>0 then
        begin
          ts:=rzListView1.Selected;
          rzListView1.SetFocus;
          i:=ts.Index;
          if i<j-1 then
          begin
            tsc:= rzlistview1.Items[i].Caption;
            tss1:=rzlistview1.Items[i].SubItems[0];
            tss2:=rzlistview1.Items[i].SubItems[1];
            rzlistview1.Refresh;
            rzListView1.Items[i+1].Selected:=true;
            rzListView1.SetFocus;
            tdc:=rzlistview1.Items[i+1].Caption;
            tds1:=rzlistview1.Items[i+1].SubItems[0];
            tds2:=rzlistview1.Items[i+1].SubItems[1];
            rzlistview1.Items[i+1].Caption:=tsc;
            rzlistview1.Items[i+1].SubItems[0]:=tss1;
            rzlistview1.Items[i+1].SubItems[1]:=tds2;
            rzlistview1.Items[i].Caption:=tdc;
            rzlistview1.Items[i].SubItems[0]:=tds1;
            rzlistview1.Items[i].SubItems[1]:=tss2;
          end;
        end;
        dataid:=rztreeview1.Selected.Data;
        movid:=integer(dataid.ID);
    {    Datamodule3.ADOTable2.Filtered :=true;
        Datamodule3.ADOTable2.Filter := 'sxparent='+inttostr(movid);
        Datamodule3.ADOTable2.Sort:='sxsort';
        datamodule3.ADOTable2.First;}
        pxsql:='select * from zbtable where sxparent='+inttostr(movid);
        With DataModule3.ADOQuery1 Do
        Begin
          Close;
          SQl.Clear;
          SQl.add(pxsql);
          open;
        End;
        DataModule3.ADOQuery1.Sort:='sxsort';
        for m:=0 to rzlistview1.Items.Count-1 do
        begin
          DataModule3.ADOQuery1.Locate('id',rzlistview1.Items[m].Caption,[lopartialkey]);
          datamodule3.ADOQuery1.Edit;
          datamodule3.ADOQuery1.FieldByName('sxsort').value:=strtoint(rzlistview1.Items[m].SubItems[1]);
          datamodule3.ADOQuery1.Post;
        end;
      end;
    end;