AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Drag and Drop im TDBGrid

Ein Thema von barnti · begonnen am 1. Mär 2004 · letzter Beitrag vom 11. Dez 2007
Antwort Antwort
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#1

Drag and Drop im TDBGrid

  Alt 1. Mär 2004, 15:51
Hi,

ich würde gern in meinen TDBGrids 'drag and drop' verwenden, und so neue Datensätze in einer Tabelle anlegen. Leider habe ich mit den folgenden Versuchen keinen Erfolg:

Delphi-Quellcode:
// Drag beginnen
procedure TForm_Main.DBGrid_MasterMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button =mbleft then DBGrid_Master.BeginDrag(false);
end;

// Drag and Drop akzeptieren?
procedure TForm_Main.DBGrid_DetailDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
  if Source is TDBGrid then
  begin
    accept:= true;

  end;

end;

// Erfolgreicher Drag-and-Drop-Vorgang
procedure TForm_Main.DBGrid_DetailDragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  if Source is TDBGrid then
    begin
      showmessage('Dragdrop');
    end;
end;
// Fehlschlag
procedure TForm_Main.DBGrid_DetailEndDrag(Sender, Target: TObject; X,
  Y: Integer);
begin
  if Target= NIL then
  MessageBeep(0);
end;
Leider funktioniert der Vorgang nur, wenn ich den in einem freien Bereich des Grid mit dem D&D beginne. Ich möchte aber auf einem der Datensätze beginnen, so dass dieser der aktuelle Datensatz wird und ich diesen dann beim D&D verwenden kann. Wie kann ich dies realisieren? Kann jemand helfen?

Gruß,

Barnti
  Mit Zitat antworten Zitat
HolyCow

Registriert seit: 13. Feb 2004
18 Beiträge
 
Delphi 8 Architect
 
#2

Re: Drag and Drop im TDBGrid

  Alt 2. Mär 2004, 22:50
Wenn ich mich recht erinnere, verhinderte ein Bug im TDBGrid das erfolgreiche Drag-and-Droppen. Wir haben das mit einer leicht modifizierten Version des TDBGrid gelöst:

Delphi-Quellcode:
unit FDDDBGrid;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids;

type
  TDDDBGrid = class(TDBGrid)
  private
    { Private declarations }
    FOnMouseDown: TMouseEvent;
  protected
    { Protected declarations }
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
  published
    { Published declarations }
    property Row;
    property OnMouseDown read FOnMouseDown write FOnMouseDown;
  end;

procedure Register;

implementation

procedure TDDDBGrid.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Assigned(FOnMouseDown) then
    FOnMouseDown(Self, Button, Shift, X, Y);
  inherited MouseDown(Button, Shift, X, Y);
end;

procedure Register;
begin
  RegisterComponents('DBGrid', [TDDDBGrid]);
end;

end.
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Drag and Drop im TDBGrid

  Alt 3. Mär 2004, 10:57
Hallo HolyCow,

kannst Du Deine Lösung vielleicht ein wenig mit Kommentaren versehen. Ich komme so damit nicht ganz klar! Bitte Erläutere die Vorgehensweise um die Anpassungen vorzunehmen.

Danke vielmals,

Gruß,

Barnti
  Mit Zitat antworten Zitat
HolyCow

Registriert seit: 13. Feb 2004
18 Beiträge
 
Delphi 8 Architect
 
#4

Re: Drag and Drop im TDBGrid

  Alt 3. Mär 2004, 15:40
Zitat von barnti:
kannst Du Deine Lösung vielleicht ein wenig mit Kommentaren versehen. Ich
Das ist nicht die Lösung, sondern nur ein Teil der Lösung . Der obige Code ist eine veränderte TDBGrid-Komponente, die ein Problem bei D&D ausräumt. Der Rest geht etwa so wie bei Dir im Programm, beim D&D-Event ist der aktuelle Datensatz im zum DBGrid gehörigen DataSet dann schon gesetzt.

Das TDDDBGrid installieren und statt dem TDBGrid verwenden, dann sollte es klappen.
  Mit Zitat antworten Zitat
barnti

Registriert seit: 15. Aug 2003
Ort: Mal hier mal da...
689 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Drag and Drop im TDBGrid

  Alt 3. Mär 2004, 15:58
Hi,

ich habe den Hinweis auf der Borland-Seite gefunden. Da ich aber einen anderen Workarround gefunden habe belasse ich es dabei. Meine Lösung:

Delphi-Quellcode:
procedure TForm_Main.DBGridColEnter(Sender: TObject);
var mousedown: Smallint;
begin
  if down then // Globale Variable, die bei der Navigation im Grid aus false gesetzt wird
    begin
      DBGrid_Master.BeginDrag(false);
    end;
  down:= true; // Rücksetzen der Variable
end;
Das OnColEnter initiiert den D&D-Vorgang, wenn das OnColEnter durch MouseKlick ausgelöst wurde. Ansonsten wird das Ereignis 'ignoriert'.

Danke für Deine Bemühungen. Es läuft jetzt erstmal. Zwar mit globaler Variable aber das ist die erste. Außerdem gibt es sicherlich noch einen anderen Weg ohne diese Variable. Später...

Gruß,

Barnti
  Mit Zitat antworten Zitat
Seven

Registriert seit: 4. Dez 2003
44 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: Drag and Drop im TDBGrid

  Alt 11. Dez 2007, 09:11
Hallo,
das Thema ist zwar schon älter, aber ich habe gerade das selbe Problem. Ich habe ein DBGrid und würde gerne die Reihen per Drap'n Drop im selben DBGrid vertauschen und anschließend per SQL speichern. Ist das überhaupt mit den Standardkomponenten machbar?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz