将AdvancedDataGrid的分组数据拖放到DataGrid中

如果AdvancedListBase组件如AdvancedDataGrid没有用分组数据,拖放时会当成是DataGrid,因此可以很方便地拖放到ListBase组件如DataGrid或List中。但如果用分组数据,又怎么实现这个功能呢?Flex的帮助文件没有讲,网上这方面的资料也很少,本文将以AdvancedDataGrid和DataGrid为例讲述。

实现功能:选择AdvancedDataGrid中一个或多个叶节点项目,选择一个或多个子节点项目,同时选择一个或多个叶节点项目和一个或多个子节点项 目,拖放到DataGrid中。拖放操作有三个主要的类:DragManager、DragSource和DragEvent,其中DragEvent是最核心的。可以为DataGrid(拖放目标)添加DragEvent类事件侦听器 函数测试一下,结果不起任何作用。如果看过AdvancedListBase和ListBase及其子类的源码,就知道原因了。以dragEnterHandler处理方法为例:

protected function dragEnterHandler(event:DragEvent):void
{
        if (event.isDefaultPrevented())
		return;

		lastDragEvent = event;

        if (enabled && iteratorValid && event.dragSource.hasFormat("items"))
        {
		DragManager.acceptDragDrop(this);
		DragManager.showFeedback(event.ctrlKey ? DragManager.COPY : DragManager.MOVE);
		showDropFeedback(event);
		return;
        }

        hideDropFeedback(event);
        
        DragManager.showFeedback(DragManager.NONE);
}

很简单,它首先要检测要检测的被拖动的数据是否包含使用相应格式的数据,因为AdvancedDataGrid的分组数据的格式不是items而是 treeDataGridItems,因此我们得用DataGrid子类重写drapOverHandler等DragEvent方法,添加对treeDataGridItems数据格式的支持。如:

override protected function dragEnterHandler(event:DragEvent):void
{

	super.dragEnterHandler(event);

	if (enabled && iteratorValid && event.dragSource.hasFormat("treeDataGridItems"))
	{
		DragManager.acceptDragDrop(this);
		DragManager.showFeedback(event.ctrlKey ? DragManager.COPY : DragManager.MOVE);
		showDropFeedback(event);
		return;
	}
}

点击此处查看本实例的效果,点击此处下载本实例的源码。

所以说,搞清楚AdvancedDataGrid和DataGrid拖放的工作原理,实现起来就不难了。至于反过来怎样将DataGrid的项目拖放到AdvancedDataGrid上,原理都一样,此处就不再说了。另外,我在dragDropHandler方法中添加了同时选择拖放AdvancedDataGrid子节点项目的功能,感兴趣的可以参考一下。值得注意的是,如 果拖放的是AdvancedDataGrid子节点项目,在DataGrid中不会按原来的排列顺序显示。因此设置了DataGrid的dragEnabled和dragMoveEnabled属性为true,这样就可以在DataGrid 内部中调整项目的顺序了。

上一篇上一篇: 创建自动滚动的DataGrid
下一篇下一篇: 不同状态下Series的填充
来自文章来自: 本站原创
引用引用通告: 查看所有引用 | 我要引用此文章
标签Tags: DataGrid AdvancedDataGrid
相关相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭