
Anwendungsszenarien
Bei der Table gibt es folgende Fälle zur Anwendung von Drag&Drop:
1. Drag and Drop zwischen Zeilen und ans Ende der Tabelle
Sie können selektierte Zeilen einer Table zwischen bereits existierenden Table-Zeilen fallen lassen oder an eine Table anfügen. Dafür stehen die Aggregationen DRAG_SOURCE_INFO und DROP_TARGET_INFO sowie das Ereignis onDrop zur Verfügung.
2. Drag and Drop auf Zeilen
Sie können festlegen, dass das Droppen auf eine Zeile möglich ist. Dafür stehen Ihnen die Aggregation dropOnRowTargetInfo, die Eigenschaft dropOnRowName und die Eigenschaft DropTargetInfo.name zur Verfügung.
Beachten Sie, dass Sie die Informationen über gedraggte Zeilen über die Eigenschaft data beim onDrop-Event selbst abholen müssen. Die Eigenschaft stellt die textuelle Repräsentation der Daten dar, die zum DropTarget transportiert werden.
Weitere Informationen: DragSourceInfo-Eigenschaften
3. Drop auf Zellen
Um ein Element mit DragSourceInfo in Tabellenzellen fallen zu lassen, verwenden Sie als Zelleditor in der Table den DropTargetCellEditor.
Vorgehensweise zum Ermöglichen des Droppens auf eine Zeile
Aggregieren Sie DropTargetInfos an die Table-Aggregation DROP_ROW_TRG_INFS.
Vergeben Sie als DropTargetInfos.name verschiedene Werte. Wenn Sie eine DropTargetInfo in der Table-Aggregation DROP_TARGET_INFO wiederverwenden möchten, geben Sie auch dort einen Namen an.
Setzen Sie die Eigenschaft Table.dropOnRowName.
Der Wert muss entweder initial sein oder der Name einer der DropTargetInfos sein, die zu den Table-Aggregationen DROP_TARGET_INFO oder DROP_ROW_TRG_INFS gehören.
Durch Context-Binding können Sie jeder Table-Zeile einen anderen Wert zuordnen und dadurch das unterschiedliche Drop-on-Row-Verhalten steuern.
Wenn der Wert initial ist, ist kein Droppen auf eine Zeile möglich. Wenn der Wert dem Namen einer DropTargetInfo entspricht, dann legt diese DropTargetInfo das Droppen auf Table-Zeilen fest.
Sie finden ein Beispiel hierzu in der Component WDR_TEST_DRAG_AND_DROP in der View Table: Photo album.
Drag&Drop in hierarchischen Tables
Für hierarchische Tabellen, also Tables mit Row-Arrangements TreeByKeyTableColumn oder TreeByNestingTableColumn gibt es folgende Szenarien:
Wenn die folgenden Bedingungen erfüllt sind, kann man Objekte zwischen Tabellenzeilen fallen lassen und die DropTargetInfo der Table bestimmt global wie dies zu geschehen hat (d.h. sie bestimmt die tags:
Die Aggregation Table.dropOnRowTargetInfo ist leer
Die Eigenschaft Table.dropOnRowName ist initial
Die Eigenschaft DropTargetInfo.name des aggregierten Elementes in Table.dropTargetInfo ist initial
Sobald eine der oben genannten Eigenschaften oder Aggregationen mit Werten gefüllt sind, gilt Folgendes für Drag&Drop : Die DropTargetInfo in der Aggregation Table.dropTargetInfo kontrolliert das Einfügen über Drag&Drop lediglich auf dem Wurzelknoten, d.h. das Einfügen von Zeilen der obersten Hierarchieebene. Wie im vorigen Abschnitt beschrieben legt die Eigenschaft Table.dropOnRowName zusammen mit den an die Table aggregierten DropTargetInfos fest, ob und wie Elemente auf eine Table-Zeile fallen gelassen werden können. Zusätzlich legt die Eigenschaft Table.dropOnRowName und das dadurch bestimmte DropTargetInfo fest, ob und wie Elemente zwischen ihre Kindelemente eingefügt werden können.
Beachten Sie, dass Sie die Ausprogrammierung der Funktionalität (also Einfügen, Umsortieren, etc.) immer selbst vornehmen müssen.
Sie finden ein Beispiel im System in der Component WDR_TEST_DRAG_AND_DROP in der View TableTreeByKey: More generic example. Dort werden zwei Tables angezeigt mit Schiffen, Containern und Gütern. Sie können Güter in Container und Container in Schiffe droppen, aber nicht Schiffe in Container oder in Güter. Sie können einen Container auf einer Zeile, die ein Schiff darstellt, fallen lassen, damit er am Ende der Containerliste des Schiffes eingefügt wird. Alternativ können Sie den Knoten öffnen, der das Schiff repräsentiert (indem Sie den Mauszeiger beim "Draggen" über das Dreiecksymbol für das Aufklappen der Kindelemente bewegen), und dann den Container zwischen einem der Kindelemente fallen lassen.
Dokumentation zu Drag&Drop