//1 组建重写
package hxht.comps.datagrid
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.events.MouseEvent;
import mx.collections.ArrayCollection;
import mx.collections.IList;
import mx.events.DynamicEvent;
import spark.components.gridClasses.IGridItemRenderer;
[Event(name="selectionChangeWithFiler",type="mx.events.DynamicEvent")]
[Event(name="doubleClickWithFiler",type="mx.events.DynamicEvent")]
[Event(name="HXCheckedChangeEvent",type="flash.events.Event")]
public class DataGridCheck extends DataGridLocal
{
public function DataGridCheck()
{
super();
catchSelectedItems = new ArrayCollection() ;
this.addEventListener( "OneSelectedEvent" , oneSelectedHandler ) ;
this.addEventListener( "AllSelectedEvent" , allSelectedHandler ) ;
}
/**
* 选中数据源
*/
[Bindable]
public var catchSelectedItems:ArrayCollection = new ArrayCollection() ;
/**
* 选中对象地图
*/
// [Bindable]
//public var catchSelectedMap:Object = new Object() ;
private var _changFilter:String = "" ;
[Bindable]
/**
* 是不是单选 模式
*/
public var isRadio:Boolean = false ;
/**
* 需要动态设置对象 的属性
*/
public var selectedatt:String = "selected" ;
/**
* 选择地图 属性
*/
//public var selectedmapatt:String = "id" ;
//override public function set dataProvider(value:IList):void
//{
// super.dataProvider = value ;
// reset() ;
//}
/**
*
*
*/
override protected function selectedcHandler( e:MouseEvent ):void
{
var _colugrd:IGridItemRenderer = getColumnc(e.target as DisplayObject ,IGridItemRenderer ) as IGridItemRenderer ;
if(_colugrd)
{
if(_changFilter && _changFilter!="" && changFilter.indexOf( (","+_colugrd.column.columnIndex+","))>-1)
return ;
else
{
var _et:String = "selectionChangeWithFiler" ;
if(e.type == MouseEvent.DOUBLE_CLICK)
_et = "doubleClickWithFiler" ;
var _ev:DynamicEvent = new DynamicEvent(_et) ;
_ev.data = this.selectedItem ;
this.dispatchEvent( _ev ) ;
}
}
}
override protected function getColumnc( ui:DisplayObject , cls:Class ):Object
{
var _re:Object ;
var _uiv:DisplayObject = ui ;
while(true)
{
if(_uiv is cls )
{
_re = _uiv ;
break ;
}
if(_uiv && _uiv.parent)
_uiv = _uiv.parent as DisplayObject ;
else
break ;
}
return _re ;
}
/**
*
*
*/
protected function reset():void
{
if(catchSelectedItems==null)
catchSelectedItems = new ArrayCollection() ;
else
{
catchSelectedItems.removeAll() ;
catchSelectedMap = new Object() ;
}
if(dataProvider && dataProvider.length>0)
{
selecteedfdfdf(false) ;
}
}
protected function selecteedfdfdf( value:Boolean):void
{
var _ev:DynamicEvent = new DynamicEvent("AllSelectedEvent_dg") ;
_ev.selected = value ;
_ev.data = "all" ;
this.dispatchEvent( _ev ) ;
}
/**
* 反转选中的
*
*/
public function reverseChecked():void
{
if(this.dataProvider)
{
if(catchSelectedItems==null)
catchSelectedItems = new ArrayCollection() ;
var _len:int = dataProvider.length;
catchSelectedItems.removeAll() ;
catchSelectedMap = new Object() ;
var _value:Object ;
for(var i:int =0;i<_len;i++)
{
_value = dataProvider.getItemAt(i) ;
if(_value.hasOwnProperty(selectedatt))
_value[selectedatt] = !(Boolean(_value[selectedatt]));
//存储选中对象
if( _value[selectedatt] == true )
{
catchSelectedItems.addItem( _value ) ;
if(_value.hasOwnProperty(selectedmapatt))
catchSelectedMap[_value[selectedmapatt]+""] = _value ;
}
}
}
refreshSelectAllBox() ;
}
/**
* 全选 反选 接口
* @param selectedv 全选true 反选 false
*
*/
public function checkedAll( selectedv:Boolean = true ):void
{
if(this.dataProvider)
{
if(catchSelectedItems==null)
catchSelectedItems = new ArrayCollection() ;
var _len:int = dataProvider.length;
//如果已经全选中了不进行处理
if(catchSelectedItems.length ==_len && selectedv)return;
//如果已经全取消不进行处理
if(catchSelectedItems.length == 0 && !selectedv)return;
catchSelectedItems.removeAll() ;
catchSelectedMap = new Object() ;
for(var i:int =0;i<_len;i++)
{
var _value:Object = dataProvider.getItemAt(i) ;
if(_value.hasOwnProperty(selectedatt))
_value[selectedatt] = selectedv;
//存储选中对象
if(selectedv)
{
catchSelectedItems.addItem( _value ) ;
if(_value.hasOwnProperty(selectedmapatt))
catchSelectedMap[_value[selectedmapatt]+""] = _value ;
}
}
}
refreshSelectAllBox() ;
this.dispatchEvent(new Event("HXCheckedChangeEvent"));
}
/**
*
* @param data
* @param att
*
*/
public function checkItem( data:Object ):void
{
if(data && data.hasOwnProperty(selectedatt))
{
data[selectedatt] = false ;
data[selectedatt] = true ;
checkItemData(data , true ,false ) ;
}
}
/**
*
* @param e
*
*/
protected function allSelectedHandler( e:DynamicEvent ):void
{
checkedAll( e.selected as Boolean );
}
protected function oneSelectedHandler( e:DynamicEvent ):void
{
if(catchSelectedItems==null)
catchSelectedItems = new ArrayCollection() ;
// var _index:int = catchSelectedItems.getItemIndex( _item ) ;
//
// //选中存储对象
// if(_selected && _index==-1)
// catchSelectedItems.addItem( _item ) ;
//
// //没有选中删除对象
// else if(_index>=0)
// catchSelectedItems.removeItemAt( _index ) ;
//全循环 准确率高点
catchSelectedItems.removeAll() ;
catchSelectedMap = new Object() ;
var _value:Object ;
checkItemData( e.data , isRadio ) ;
}
/**
*
* @param item
* @param selected
*
*/
protected function checkItemData( item:Object , selected:Boolean , ev:Boolean=true):void
{
catchSelectedItems.removeAll() ;
catchSelectedMap = new Object() ;
var _value:Object ;
if(selected)
{
catchSelectedItems.addItem( item ) ;
for each( _value in dataProvider )
{
if(_value!=item && _value.hasOwnProperty(selectedatt) )
{
_value[selectedatt] = false ;
}
else
{
_value[selectedatt] = false ;
_value[selectedatt] = true ;
}
}
}
else
{
for each( _value in dataProvider )
{
if(_value.hasOwnProperty(selectedatt) && _value[selectedatt] == true )
{
catchSelectedItems.addItem( _value ) ;
if(_value.hasOwnProperty(selectedmapatt))
catchSelectedMap[_value[selectedmapatt]+""] = _value ;
}
}
refreshSelectAllBox();
}
if(ev)
this.dispatchEvent(new Event("HXCheckedChangeEvent"));
}
/**
* 判断是否勾选全选
*/
protected function refreshSelectAllBox():void
{
//判断是否勾选全部选中
if( dataProvider )
{
var _ev:DynamicEvent = new DynamicEvent("AllSelectedEvent_dg") ;
_ev.data = "null" ;
if(catchSelectedItems.length == dataProvider.length && catchSelectedItems.length != 0)
_ev.selected = true ;
else
_ev.selected = false ;
this.dispatchEvent(_ev) ;
}
}
/**
* ,0,1,2,
*/
override public function get changFilter():String
{
return _changFilter ;
}
/**
* @private
*/
override public function set changFilter(value:String):void
{
if(_changFilter!="")
{
this.removeEventListener( MouseEvent.CLICK, selectedcHandler ) ;
this.removeEventListener( MouseEvent.DOUBLE_CLICK, selectedcHandler ) ;
}
_changFilter = value;
if(_changFilter && _changFilter!="")
{
this.addEventListener( MouseEvent.CLICK , selectedcHandler ) ;
this.addEventListener( MouseEvent.DOUBLE_CLICK , selectedcHandler ) ;
}
}
}
}
//一下是两个渲染器
<?xml version = "1.0" encoding = "utf-8"?>
<s:GridItemRenderer xmlns:fx = "http://ns.adobe.com/mxml/2009"
xmlns:s = "library://ns.adobe.com/flex/spark"
xmlns:mx = "library://ns.adobe.com/flex/mx"
contentBackgroundAlpha = "0"
remove = "griditemrenderer1_removeHandler(event)">
<fx:Metadata>
[Style(name="bgfills", type="Array" )]
[Style(name="borderColor", type="uint", format="Color", inherit="no")]
</fx:Metadata>
<fx:Script>
<![CDATA[
import mx.events.DynamicEvent;
import mx.events.FlexEvent;
[Bindable]
public var checked:Boolean = false;
override public function set owner(value:DisplayObjectContainer):void
{
super.owner = value;
if (owner)
owner.addEventListener("AllSelectedEvent_dg", selectedHandler);
}
protected function griditemrenderer1_removeHandler(event:FlexEvent):void
{
if (owner)
owner.removeEventListener("AllSelectedEvent_dg", selectedHandler);
}
private function selectedHandler(e:DynamicEvent):void
{
checked = e.selected;
}
private function checkbox1_changeHandler():void
{
if (owner)
{
var ev:DynamicEvent = new DynamicEvent("AllSelectedEvent");
ev.data = this;
ev.selected = checkf.selected;
owner.dispatchEvent(ev);
}
}
override protected function updateDisplayList(w:Number, h:Number):void
{
var _arr:Array = this.getStyle("bgfills") ;
if(_arr && _arr.length>=3)
{
fill1.color = _arr[0] ;
fill2.color = _arr[1] ;
fill3.color = _arr[2] ;
}
super.updateDisplayList(w,h) ;
}
]]>
</fx:Script>
<s:Group width="100%" height="100%">
<!--- @private -->
<s:Rect id="fill" left="0" right="0" top="0" bottom="0">
<s:fill>
<s:LinearGradient rotation="90">
<s:GradientEntry id="fill1" color="0xe7f3ff" />
<s:GradientEntry id="fill2" color="0xf0f7ff" />
<s:GradientEntry id="fill3" color="0xffffff" />
</s:LinearGradient>
</s:fill>
</s:Rect>
</s:Group>
<s:CheckBox id = "checkf"
styleName="listCheckSty_sys"
selected = "@{checked}"
buttonMode = "true"
verticalCenter = "0"
horizontalCenter = "0"
click = "checkbox1_changeHandler()"/>
</s:GridItemRenderer>
//2
<?xml version = "1.0" encoding = "utf-8"?>
<renders:GridItemRenderLocal xmlns:fx = "http://ns.adobe.com/mxml/2009"
xmlns:s = "library://ns.adobe.com/flex/spark"
xmlns:mx = "library://ns.adobe.com/flex/mx"
xmlns:renders = "hxht.comps.datagrid.renders.*">
<fx:Script>
<![CDATA[
import mx.events.DynamicEvent;
private function checkbox1_changeHandler():void
{
if (owner)
{
var ev:DynamicEvent = new DynamicEvent("OneSelectedEvent");
ev.data = this.data;
ev.selected = checkf.selected;
owner.dispatchEvent(ev);
}
}
]]>
</fx:Script>
<s:Group width = "100%"
height = "{rowHeight}" verticalCenter="0">
<s:CheckBox selected = "@{data.selected}"
id = "checkf"
styleName="listCheckSty_sys"
verticalCenter = "0"
horizontalCenter = "0"
buttonMode = "true"
click = "checkbox1_changeHandler()"/>
</s:Group>
</renders:GridItemRenderLocal>
//用法
<datagrid:DataGridCheck width="100%"
height="100%"
id="dg0"
//dataProvider="绑定的arrayCollection"
catchSelectedItems="选中的记录存入(一个arrayCollection)">
<datagrid:columns>
<s:ArrayCollection>
<s:GridColumn headerRenderer = "HeaderCheckRender"
itemRenderer = "ColumnCheckRender"
width = "50"/>
<s:GridColumn headerText="***"
dataField="***"/>
。。。。。
方法写的很详细, 直接复制粘贴就用拉。用完了别忘了谢谢我!
相关推荐
本文将详细讨论如何在Flex DataGrid中实现全选和反选功能,并结合`checkBox`来优化这一过程。 首先,我们要理解DataGrid的结构。DataGrid由多个列组成,每一列可能包含不同类型的控件,如文本、图像或复选框。在...
### Flex DataGrid Checkbox 全选/反选知识点详解 #### 一、概述 Flex DataGrid 控件是Adobe Flex框架中的一个重要组成部分,它提供了一个灵活的方式来展示数据列表,并且支持多种功能,如排序、分组、筛选等。在...
在这里,我们需要遍历`DataGridView`的所有行,检查每行的复选框状态,并根据全选/反选的逻辑进行更新。 3. **同步状态**: 当用户更改了任何行中的`CheckBox`状态时,我们也需要更新列头的`CheckBox`状态,以反映...
本文将详细探讨如何在Flex4的List组件上实现全选和反选功能。 首先,我们需要了解Flex4 List的基本结构。List组件通过数据Provider(通常是ArrayCollection或XMLListCollection)来存储和显示数据。每个数据项对应...
在Flex开发中,Datagrid是一种常用的组件,用于展示表格数据,而checkbox全选功能则是提高用户体验的一个重要特性。本文将详细讲解如何实现Flex Datagrid中checkbox的全选功能。 首先,我们要了解Flex Datagrid的...
以上就是Flex中DataGrid内嵌CheckBox实现全选反选及防止选择状态错乱的基本步骤。通过自定义列类、监听CheckBox事件和处理全选/全反逻辑,我们可以创建一个功能完善的多选DataGrid。在实际项目中,还可以根据需求...
当用户点击这个复选框时,会触发事件,该事件遍历DataGrid的所有行并设置它们的IsSelected属性,从而实现全选或反选的效果。 ### 分页功能 分页是处理大量数据的关键,因为它可以避免一次性加载所有数据导致的性能...
在Flex开发中,数据网格...总结,这个Flex3示例展示了如何在DataGrid中嵌套复选框并实现全选功能,这对于构建交互式的数据管理界面至关重要。通过学习和实践,开发者可以创建更灵活、用户友好的数据操作界面。
在JavaScript中,可以通过获取全选按钮的`checked`属性来控制所有复选框的状态。当全选按钮被选中时,设置所有复选框的`checked`属性为`true`;反之,如果全选按钮未选中,将`checked`属性设为`false`。 ```...
在Flex编程中,Datagrid组件是用于展示数据集的一个强大工具,它允许用户进行交互式的数据浏览和操作。"Flex Datagrid全选功能"是指在Datagrid中实现一个功能,让用户能够一键选择所有行,这在处理大量数据时非常...
这个场景下,用户可能需要实现一个常见的功能,即在DataGrid中添加CheckBox,允许用户进行多选操作,尤其是全选功能。这篇博客“在DataGrid中使用CheckBox,实现全选功能”详细介绍了如何实现这一需求。 首先,我们...
本文将深入探讨如何实现DataGrid的全选功能,并详细讲解如何获取选中条目数。 首先,我们要了解DataGrid的基本操作。DataGrid通常与数据源绑定,例如数据库、数组或集合。它允许用户浏览、编辑和操作数据。全选功能...
下面我们将详细探讨如何在Flex的DataGrid中实现全选和全不选的功能。 ### 一、理解Flex DataGrid 首先,我们需要了解Flex中的DataGrid是如何工作的。DataGrid组件依赖于数据提供者(dataProvider),通常是一个 ...
在Flex开发中,DataGrid组件是一个非常常用的控件,它用于展示数据集合,并提供交互式操作,如排序、选择等。本示例聚焦于DataGrid中的CheckBox集成,特别是实现一个全选的功能。以下是对这个主题的详细解释: 一、...
Flex DataGrid组件是Adobe Flex框架中的一个重要控件,专门用于以表格形式展示数据。它具有丰富的功能和灵活性,常用于企业级应用中显示多属性对象的列表。DataGrid组件不仅支持基本的表格布局,还提供了排序、编辑...
为了提高用户体验并简化操作流程,开发人员经常需要为DataGrid添加全选和反选的功能。本文将详细介绍如何使用JavaScript来实现这一功能,并深入探讨其实现原理和技术细节。 #### 功能概述 本示例中的`selectall`...
在WPF的DataGrid控件中,全选和全不选功能可以通过绑定到DataGrid的选中项集合(SelectedItems)并监听其变化来实现。以下是一个简化的实现步骤: 1. **创建DataGrid控件**:在XAML中,首先我们需要定义一个...
在开发用户界面时,特别是在涉及到多选列表时,全选和反选功能是常见的需求。本教程将详细介绍如何在WPF中实现CheckBox的全选和反选功能。 首先,我们需要理解CheckBox的基本用法。在XAML中,我们可以创建一个...
本文将深入探讨如何在Flex中的DataGrid组件中实现复选框的全选与取消全选功能,这对于数据操作和用户交互至关重要。 在Flex的DataGrid组件中,我们通常会遇到这样的需求:当用户需要对多条记录进行批量操作时,如...
2. 编写后台代码,处理全选/取消全选的事件,并同步复选框状态。 3. 实现`SelectionChanged`、`Checked`和`Unchecked`事件,确保数据源与界面状态一致。 通过以上步骤,你可以在`DataGrid`中实现复选框的全选和取消...