进阶: 案例八: 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. 如何结束拖放操作. 开始拖拽 用户使用一个拖拽手势开始拖拽,通常是在 ...
随机推荐
- CentOS下配置多个Tomcat同时运行 本篇文章来源于 Linux公社网站(www.linuxidc.com)
原文地址:http://blog.csdn.net/tjcyjd/article/details/46553361 版权声明:本文为博主原创文章,未经博主允许不得转载. 同一服务器部署多个tomcat ...
- BZOJ 3384: [Usaco2004 Nov]Apple Catching 接苹果( dp )
dp dp( x , k ) = max( dp( x - 1 , k - 1 ) + *** , dp( x - 1 , k ) + *** ) *** = 0 or 1 ,根据情况 (BZOJ 1 ...
- 【转】opencv-在图像上显示字符(不包括中文)
原文参见:http://blog.csdn.net/ycc892009/article/details/6516528 1 #include <cv.h> #include <hig ...
- 深入JDK源码之Arrays类中的排序查找算法(转)
原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列 ...
- 执行Git命令时出现 SSL certificate problem 的解决办法
比如我在windows下用git clone gitURL 就提示 SSL certificate problem: self signed certificate 这种问题,在windows下出现 ...
- hdu1248
Problem Description 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票(记住,只有一张钞票),为了防止自己在战斗中频繁的死掉,他决定给自己买一些道具,于是他来到了地精商店前. 死亡 ...
- php 写内容入csv文件乱码解决方法
加入BOM头即可 fwrite($fp,"\xEF\xBB\xBF"); 参考:http://justcoding.iteye.com/blog/1668308
- C++逗号运算符与逗号表达式
C++将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其他语句(如输出语句.循环语句等)中.这是C++语言灵活性的一种表现. 请注意,用cout语句输出一个 ...
- Ibatis调用存储过程实现增删改以及分页查询
1.Ibatis实现增删改操作很简单了,通常我是将某一模块的增删改功能写在一个存储过程里,通过一个标识符去区分执行增加还是修改抑或删除操作. statement: <!-- 存储过程:实现学生的 ...
- Qt国际化(Q_DECLARE_TR_FUNCTIONS() 宏给非Qt类添加翻译支持,以前没见过QTextEncoder和QTextDecoder和QLibraryInfo::location()和QEvent::LanguageChange)
Internationalization with Qt 应用程序的国际化就是使得程序能在国际间可用而不仅仅是在本国可用的过程. Relevant Qt Classes andAPIs 以下的类支持Q ...