进阶: 案例八: Drag and Drop(动态)
1、节点

2、UI

3、

4、方法:
METHOD wddomodifyview .
DATA: lo_container TYPE REF TO cl_wd_uielement_container,
lo_grid_layout TYPE REF TO cl_wd_grid_layout,
lo_grid_data TYPE REF TO cl_wd_grid_data,
lo_drag_source_info TYPE REF TO cl_wd_drag_source_info,
lo_drop_target_info TYPE REF TO cl_wd_drop_target_info,
lo_child TYPE REF TO cl_wd_uielement,
lt_children TYPE cl_wd_uielement=>tt_uielement,
l_sourceidx TYPE i,
lw_dragdata TYPE string,
lw_tagetidx TYPE i.
IF first_time = abap_true.
* for Group1
lo_container ?= view->get_element( 'GROUP1' ).
lo_grid_layout ?= lo_container->get_layout( ).
lo_grid_layout->set_on_drop( 'DROPIT1' ).
** create drap-source-info
lo_drag_source_info = cl_wd_drag_source_info=>new_drag_source_info(
bind_enabled = 'GRID_DRAG_ENABLED'
view = view
tags = 'gridcell1' ).
** set drap-source-info
lo_grid_layout->set_drag_source_info( lo_drag_source_info ).
** create drop-target-info
lo_drop_target_info = cl_wd_drop_target_info=>new_drop_target_info(
bind_enabled = 'GRID_DROP_ENABLED' "This is not neccessary)
view = view
tags = 'gridcell*').
** set drop-target-info
lo_grid_layout->set_drop_target_info( lo_drop_target_info ).
* for Group2
lo_container ?= view->get_element( 'GROUP2' ).
lo_grid_layout ?= lo_container->get_layout( ).
lo_grid_layout->set_on_drop( 'DROPIT2' ).
** create drap-source-info
lo_drag_source_info = cl_wd_drag_source_info=>new_drag_source_info(
bind_enabled = 'GRID_DRAG_ENABLED'
view = view
tags = 'gridcell2' ).
** set drap-source-info
lo_grid_layout->set_drag_source_info( lo_drag_source_info ).
** create drop-target-info
lo_drop_target_info = cl_wd_drop_target_info=>new_drop_target_info(
bind_enabled = 'GRID_DROP_ENABLED'
view = view
tags = 'gridcell*'
).
** set drop-target-info
lo_grid_layout->set_drop_target_info( lo_drop_target_info ).
ENDIF.
IF wd_this->perform_drop IS NOT INITIAL.
IF wd_this->tags = 'gridcell2'.
lo_container ?= view->get_element( 'GROUP2' ).
ELSE.
lo_container ?= view->get_element( 'GROUP1' ).
ENDIF.
**get the source Index
lt_children = lo_container->get_children( ).
LOOP AT lt_children INTO lo_child.
l_sourceidx = sy-tabix.
lo_grid_data ?= lo_child->get_layout_data( ).
lw_dragdata = lo_grid_data->get_drag_data( ).
IF lw_dragdata = wd_this->source_data.
EXIT.
ENDIF.
ENDLOOP.
**Modify
CASE wd_this->target_id.
WHEN 'TEST1'.
**Trigger by himself:group1
IF wd_this->tags = 'gridcell1'.
IF wd_this->offset = -.
lw_tagetidx = wd_this->index.
ELSE.
lw_tagetidx = wd_this->index + .
ENDIF.
IF l_sourceidx <> lw_tagetidx.
lo_container ?= view->get_element( 'GROUP1' ).
lo_container->remove_child( index = l_sourceidx ).
lo_container->add_child( the_child = lo_child index = lw_tagetidx ).
ENDIF.
ELSE.
**Trigger by group2
lo_container ?= view->get_element( 'GROUP2' ).
lo_container->remove_child( index = l_sourceidx ).
lo_container ?= view->get_element( 'GROUP1' ).
lo_container->add_child( the_child = lo_child index = lw_tagetidx ).
ENDIF.
WHEN 'TEST2'.
**Trigger by himself:group2
IF wd_this->tags = 'gridcell2'.
IF wd_this->offset = -.
lw_tagetidx = wd_this->index.
ELSE.
lw_tagetidx = wd_this->index + .
ENDIF.
IF l_sourceidx <> lw_tagetidx.
lo_container ?= view->get_element( 'GROUP2' ).
lo_container->remove_child( index = l_sourceidx ).
lo_container->add_child( the_child = lo_child index = lw_tagetidx ).
ENDIF.
ELSE.
**Trigger by group1
lo_container ?= view->get_element( 'GROUP1' ).
lo_container->remove_child( index = l_sourceidx ).
lo_container ?= view->get_element( 'GROUP2' ).
lo_container->add_child( the_child = lo_child index = lw_tagetidx ).
ENDIF.
ENDCASE.
ENDIF.
CLEAR:wd_this->perform_drop.
ENDMETHOD.
5、方法中创建的动态事件DROPIT1
参数:

代码:
method ONACTIONDROPIT1 .
wd_this->source_data = data.
wd_this->INDEX = INDEX.
wd_this->OFFSET = OFFSET.
wd_this->TAGS = TAGS.
wd_this->ID = ID.
wd_this->TARGET_ID = 'TEST1'.
wd_this->PERFORM_DROP = 'X'.
endmethod.
6、
方法中创建的动态事件DROPIT2
参数:

代码:
method ONACTIONDROPIT2 .
wd_this->source_data = data.
wd_this->INDEX = INDEX.
wd_this->OFFSET = OFFSET.
wd_this->TAGS = TAGS.
wd_this->ID = ID.
wd_this->TARGET_ID = 'TEST2'.
wd_this->PERFORM_DROP = 'X'.
endmethod.
进阶: 案例八: Drag and Drop(动态)的更多相关文章
- 通过HTML5的Drag and Drop生成拓扑图片Base64信息
HTML5 原生的 Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过 ...
- 【译】SQL Server索引进阶第八篇:唯一索引
原文:[译]SQL Server索引进阶第八篇:唯一索引 索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就 ...
- 基于HTML5的Drag and Drop生成图片Base64信息
HTML5的Drag and Drop是很不错的功能,网上使用例子较多如 http://html5demos.com/drag ,但这些例子大部分没实际用途,本文将搞个有点使用价值的例子,通过Drag ...
- 『HTML5梦幻之旅』 - 仿Qt演示样例Drag and Drop Robot(换装机器人)
起源 在Qt的演示样例中看到了一个有趣的demo.截图例如以下: 这个demo的名字叫Drag and Drop Robot,简单概括而言,在这个demo中,能够把机器人四周的颜色拖动到机器人的各个部 ...
- Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图
Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图 OSM(OpenStreetMap-开放街道地图)服务就是一种发布自己地图数据图片为服务的一种实现类型,开放街道 ...
- js进阶 9-11 select选项框如何动态添加和删除元素
js进阶 9-11 select选项框如何动态添加和删除元素 一.总结 一句话总结: 二.js进阶 9-11 select选项框如何动态添加和删除元素 1.案例说明 2.相关知识 Select 下拉列 ...
- mybatis进阶案例之多表查询
mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...
- HTML5 之拖放(drag与drop)
拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...
- Android 用户界面---拖放(Drag and Drop)(三)
设计拖放操作 本节主要内容如下: 1. 如何开始拖拽: 2. 在拖拽期间如何响应事件: 3. 如何响应落下事件: 4. 如何结束拖放操作. 开始拖拽 用户使用一个拖拽手势开始拖拽,通常是在 ...
随机推荐
- HDU2527:Safe Or Unsafe(哈弗曼树)
Problem Description Javac++ 一天在看计算机的书籍的时候,看到了一个有趣的东西!每一串字符都可以被编码成一些数字来储存信息,但是不同的编码方式得到的储存空间是不一样的!并且当 ...
- listview添加onItemClickListener
MainActivity.java package com.wyl.listview04; import java.util.ArrayList; import java.util.HashMap; ...
- 处理IIS报“由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面”
“由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面” 详细错误:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 C ...
- JS 切换显示
<style> #hhh div { width:200px; height:200px; background:red; display:none; ...
- zzuli Camellia的难题(暴力)
1784: Camellia的难题 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 67 Solved: 14SubmitStatusWeb Boar ...
- 亚马逊带Marketplace product code的image无法再mount到其他镜像上
这是对已发布镜像的保护么?难道对其进行修改的路彻底断掉了? 以volume形式attach也不行,dd成raw再读取也读不了,敢问路在何方呢 If a volume has an AWS Market ...
- C/C++ 内存布局详解(经典)(很久前不知哪儿转载的)
一个由C/C++编译的程序除了存放函数二进制代码的程序代码段(code段)外,数据占用的内存大致分为以下几个部分: 1.栈区(stack) 存放局部变量.函数参数.返回数据.返回地址等.系统自动分配释 ...
- xml学习(1)xml的几种文件格式
1.先简单介绍一下XML,xml 是基于文本的标记性行语言,类似于html,可以方便存储数据 2,XML文件的几种格式: 格式1:查看一个 XML 的 CD 目录 <?xml version=& ...
- 理解js的prototype原型对象
我们创建的每一个函数都有一个prototype(原型)属性.这个属性是一个指针,指向一个对象,而这个对象的用途是包括能够由特定类型的全部实例共享的属性和方法.假设依照字面意思来理解,那么prototy ...
- Unity UGUI——遮罩效果(Mask)
Show Mask Graphic