这是我程序里的一代,包括更新数据库: 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;
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;
我试过用一个TempItem(TListItem)直接给两行赋值互换,但很奇怪的是最后两行总是变成一样的,是否TempItem:=ListView1.selected这种写法得到的是一个类似指针变量的东西??
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
ComCtrls;type
TForm1 = class(TForm)
ListView1: TListView;
procedure ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
DragItem, TargetItem:TListItem;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y:
Integer);
var
TargetIndex: integer;
begin
DragItem := ListView1.Selected;
TargetIndex := ListView1.DropTarget.Index;
if TargetIndex>DragItem.Index then
TargetItem:=ListView1.Items.Insert(TargetIndex+1)
else TargetItem:=ListView1.Items.Insert(TargetIndex);
TargetItem.Assign(DragItem);
DragItem.Delete;
end;procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if Source=ListView1 then accept :=true;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ListView1.DragMode := dmAutomatic;
ListView1.ViewStyle := vsList;
end;end.使用鼠标拖动更快!
http://www.bwkj.net/Bios/Ddgg_soarn.ace是我做的事例