Einzelnen Beitrag anzeigen

Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Drag & Drop DBGrid

  Alt 21. Feb 2014, 10:55
Datenbank: SQLite • Version: ? • Zugriff über: UniDac
Hallo zusammen...

ich hoffe ich hab den richtigen Foren Bereich genommen mit meiner Frage...

Ich möchte über Drag & Drop Daten von einer DBGrid Zelle in eine andere DBGrid Zelle kopieren...
D.h. der User soll im DBGrid_1 auf eine Zelle klicken, und beim Klick auf eine Zelle im DBGrid_2 werden dort die Werte eingefügt/überschrieben...

Der folgende Source funktioniert bei mir bereits:

Delphi-Quellcode:
  type THackDBGrid = class(TDBGrid);


procedure Tmain_form.dbgrid_commissionsCellClick(Column: TColumn);
begin

  If (rdbtn_addtoparcel.Checked) Then
  Begin
    dbgrid_commissions.BeginDrag(True);
  End;

end;


procedure Tmain_form.dbgrid_parcelsDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin

  Accept := Source Is TDBGrid;

end;


procedure Tmain_form.dbgrid_parcelsDragDrop(Sender, Source: TObject; X, Y: Integer);
var
gc : TGridCoord;
s : String;
begin

  If (rdbtn_addtoparcel.Checked) Then
  Begin
    gc := THackDBGrid(dbgrid_parcels).MouseCoord(X,Y);
    If (gc.X > 0) And (gc.Y > 0) then
    begin
      s := Commissions.FieldByName('Quantity').AsString;

      With THackDBGrid(dbgrid_parcels) Do
      Begin
        DataSource.DataSet.MoveBy (gc.Y - Row);
        DataSource.DataSet.Edit;
        Columns.Items[-1 + gc.X].Field.AsString := s;
      end;
    end;
  End;

end;

procedure Tmain_form.dbgrid_parcelsMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  gc: TGridCoord;
begin

  gc:= dbgrid_parcels.MouseCoord(x, y);

  If (gc.X > 0) And (gc.Y > 0) Then
  Begin
    dbgrid_parcels.DataSource.DataSet.MoveBy(gc.Y - THackDBGrid(dbgrid_parcels).Row);
  End;

end;
Folgendes gefällt mir noch nicht so richtig...
Die OnMouseMove Eigenschaft im Empfangenden dbgrid_parcels wurde überschrieben um herauszufinden in welcher Zelle die Daten eingefügt werden sollen (die Methode habe ich im Internet gefunden)...
Allerdings bewirkt das jetzt auch dass sobald sich die Maus in Bereich des dbgrid_parcels befindet und sich dort auf und ab bewegt die Zeile gewechselt wird... Das sieht man z.B. am Scrollbalken an der Seite...

Wie kann ich das abstellen???
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat