UNIT Unit1; INTERFACE USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, DB, DBTables, Grids, DBGrids; TYPE TForm1 = CLASS(TForm) Query1: TQuery; DataSource1: TDataSource; Query2: TQuery; DBGrid2: TDBGrid; DataSource2: TDataSource; Query2Name: TStringField; Query2Capital: TStringField; Query2Continent: TStringField; Query2Area: TFloatField; Query2Population: TFloatField; DBGrid1: TDBGrid; Query1Name: TStringField; Query1Capital: TStringField; Query1Continent: TStringField; Query1Area: TFloatField; Query1Population: TFloatField; PROCEDURE DBGrid2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; VAR Accept: Boolean); PROCEDURE FormCreate(Sender: TObject); PROCEDURE DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer); PROCEDURE DBGrid1StartDrag(Sender: TObject; VAR DragObject: TDragObject); PROCEDURE DBGrid1CellClick(Column: TColumn); // procedure DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer); PRIVATE { Déclarations privées } PUBLIC { Déclarations publiques } END; VAR Form1: TForm1; DragRecords: ARRAY OF variant; ASource, DestSource: TDataSource; IMPLEMENTATION {$R *.dfm} PROCEDURE TForm1.DBGrid2DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; VAR Accept: Boolean); BEGIN Accept := (Source IS TDBGrid) AND (TDBgrid(sender).DataSource <> NIL); END; PROCEDURE TForm1.FormCreate(Sender: TObject); BEGIN Query1.Open; Query2.Open; END; PROCEDURE TForm1.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer); VAR I: integer; BEGIN DestSource := TDBGrid(sender).DataSource; IF ASource = DestSource THEN exit; TRY TDBGrid(sender).ReadOnly := false; TDBGrid(sender).DataSource.DataSet.Insert; FOR I := 0 TO TDBGrid(sender).FieldCount - 1 DO TDBGrid(sender).Fields[I].Value := DragRecords[I]; TDBGrid(sender).DataSource.DataSet.Post; FINALLY TDBGrid(sender).ReadOnly := true; TDBGrid(sender).DragMode := dmManual; END; END; PROCEDURE TForm1.DBGrid1StartDrag(Sender: TObject; VAR DragObject: TDragObject); VAR I: Integer; BEGIN ASource := TDBGrid(sender).DataSource; SetLength(DragRecords, TDBGrid(sender).FieldCount); FOR I := 0 TO TDBGrid(sender).FieldCount - 1 DO DragRecords[I] := TDBGrid(sender).Fields[I].Value; END; PROCEDURE TForm1.DBGrid1CellClick(Column: TColumn); BEGIN DBGrid1.BeginDrag(true); END; END.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question