برای جابجایی یک سطر از DBGrid از کد زیر استفاده کنید :
متغیر های زیر رو به یونیتتون اضافه کنید:
var
Form1: TForm1;
.
.
.
Pt: TGridCoord;
First,Last:integer;
FirstRec,LastRec:String;
.
.
.
implementation
{$R *.dfm}
در رویداد OnMouseMove ءDBGrid کدهای زیر را اضافه کنید:
if ssLeft in Shift then
begin
dbgrid1.BeginDrag(true);
First:=Pt.y;
end;
و در رویداد OnDragOver ءDBGrid نیز :
pt:= dbGrid1.MouseCoord( x, y ) ;
Last:=Pt.y;
و در پایان در رویداد OnDragDrop ءDBGrid یک متغیر از نوع Integer تعریف میکنیم و سپس کد زیر را مینویسیم :
i : Integer;
if (First>0) and (First<>Last) then
begin
FirstRec:='';
for i:=1 to Table1.FieldCount-1 do FirstRec:=FirstRec+Table1.Fields[i].AsString+'|';
Table1.MoveBy(Last-First);
LastRec:='';
for i:=1 to Table1.FieldCount-1 do LastRec:=LastRec+Table1.Fields[i].AsString+'|';
for i:=1 to Table1.FieldCount-1 do
begin
Table1.Edit;
Table1.Fields[i].AsString:=Copy(FirstRec,1,Pos('|',FirstRec)-1);
Delete(FirstRec,1,Pos('|',FirstRec));
Table1.Post;
end;
Table1.MoveBy(First-Last);
for i:=1 to Table1.FieldCount-1 do
begin
Table1.Edit;
Table1.Fields[i].AsString:=Copy(LastRec,1,Pos('|',LastRec)-1);
Delete(LastRec,1,Pos('|',LastRec));
Table1.Post;
end;
Table1.MoveBy(Last-First);
end;
همونطور که میبینین در این کد از Table برای اتصال به بانک استفاده شده , شما اگر از AdoQuery استفاده میکنین , در همین تابع آخر , هرجا Table بود کافیه به جاش نام ADOQueryتون رو قرار بدین.
موفق باشین.