回来还是把以前弄得粘在这吧,感觉自己写的这些都不能正式用,只是自己写写。
以前写的http://fogiguiuu.iteye.com/blog/591106,这里稍改下,以前那个用的话比较麻烦。
有两个类DgAssist.as是用来存储已选择的需要存储的数据,还有DgCheckBox2.as。
package
{
import flash.events.Event;
import mx.collections.ArrayCollection;
import mx.controls.CheckBox;
import mx.controls.DataGrid;
public class DgAssist
{
//存储数据数组
protected var data:ArrayCollection = null;
public function DgAssist()
{
data = new ArrayCollection();
}
//add
public function addToSelected(item:Object):void{
if(data.getItemIndex(item)<0)
{
data.addItem(item);
}
}
//del
public function delFromSelected(item:Object):void{
if(data.getItemIndex(item)>-1)
{
data.removeItemAt(data.getItemIndex(item));
}
}
//isIn
public function isInSelected(item:Object):Boolean{
if(data.getItemIndex(item)<0)
{
return false;
}
else
{
return true;
}
}
public function getData():ArrayCollection{
return data;
}
//对checkbox在第一列的datagrid进行全选
public static function selectedAll(dg:DataGrid, selected:Boolean=true):void{
if(dg != null)
{
for(var i:Number=0; i<dg.rowCount; i++)
{
if(dg.indexToItemRenderer(i) is CheckBox)
{
if(CheckBox(dg.indexToItemRenderer(i)).selected != selected)
{
CheckBox(dg.indexToItemRenderer(i)).selected = selected;
CheckBox(dg.indexToItemRenderer(i)).dispatchEvent(new Event(Event.CHANGE));
}
}
}
}
}
}
}
// ActionScript file
package
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.text.TextField;
import mx.controls.CheckBox;
import mx.controls.DataGrid;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.events.DataGridEvent;
public class DgCheckBox2 extends CheckBox{
protected var dgAssist:DgAssist = null;
protected var dgData:Object = null;
public function DgCheckBox2(){
super();
this.addEventListener(Event.CHANGE, cgHandler);
}
//初始化数据
protected function initCK():void{
if(data != null && data.hasOwnProperty("id"))
{
dgData = data.id;
}
if(this.parentDocument != null && this.parentDocument.hasOwnProperty("dgAssist"))
{
dgAssist = this.parentDocument.dgAssist;
}
}
override public function set data(value:Object) : void{
//若value为DataGridColumn类型,则此checkbox位置在datagrid的head部分,不要赋值给data
if(value is DataGridColumn)
{
this.selected = false;
}
else
{
super.data = value;
}
initCK(); //初始化
if(dgAssist != null && dgData != null)
{
if(dgAssist.isInSelected(dgData))
{
this.selected = true;
}
else
{
this.selected = false;
}
}//初始化状态
DataGrid(listData.owner).addEventListener(DataGridEvent.HEADER_RELEASE, sortEventHandler);
}
//阻止此控件所在列的headerRelease事件的发送
private function sortEventHandler(event:DataGridEvent):void{
if(event.itemRenderer == this)
{
event.preventDefault();
}
}
//居中显示
override protected function updateDisplayList(w:Number, h:Number) : void{
super.updateDisplayList(w, h);
for(var i:Number=0; i<numChildren; i++)
{
var c:DisplayObject = getChildAt(i);
if(!(c is TextField))
{
c.x = Math.round((w-c.width)/2);
c.y = Math.round((h-c.height)/2);
}
}
}
//状态改变处理
protected function cgHandler(event:Event):void{
if(dgAssist != null && dgData != null)
{
if(this.selected == true)
{
dgAssist.addToSelected(dgData);
}
else
{
dgAssist.delFromSelected(dgData);
}
return;
}//需要单独存储的情况,数据存储
else
if(data != null)
{
dispatchEvent(new Event("DgcChange", true));
return;
}//绑定数据源的情况,自己处理事件
//---head checkbox---------------------------------------------
if(dgData == null)
{
DgAssist.selectedAll(DataGrid(listData.owner), this.selected);
return;
}
}
}
}
分享到:
相关推荐
本示例关注的是在DataGrid中嵌套复选框(Checkbox),并实现全选功能。这在需要用户批量选择或操作数据的场景中非常常见。以下是对这个主题的详细讲解: 1. **Flex DataGrid组件**: Flex DataGrid是Adobe Flex...
本文将详细探讨如何在Flex的DataGrid中实现CheckBox的全选和反选功能,以及如何防止选择状态错乱的问题。 首先,我们需要创建一个自定义的DataGrid列类,这个类将扩展mx.controls.gridClasses.GridColumn,并且包含...
本文将详细讲解如何实现Flex Datagrid中checkbox的全选功能。 首先,我们要了解Flex Datagrid的基本结构。Datagrid由一系列DataGridColumn组成,每个列可以自定义渲染器来呈现不同类型的数据显示,例如文本、图片...
本文将深入探讨如何在Flex中的DataGrid组件中实现复选框的全选与取消全选功能,这对于数据操作和用户交互至关重要。 在Flex的DataGrid组件中,我们通常会遇到这样的需求:当用户需要对多条记录进行批量操作时,如...
这篇博客“在DataGrid中使用CheckBox,实现全选功能”详细介绍了如何实现这一需求。 首先,我们需要在DataGrid的列定义中添加一个CheckBox列。在WPF中,可以使用DataGridTemplateColumn来自定义列模板,将CheckBox...
在实际应用中,我们经常需要在`DataGrid`中添加复选框(CheckBox)来实现行级别的选择功能,同时提供全选和非全选的功能。这个功能不仅方便用户批量操作,也为应用提供了更好的交互性。本教程将详细讲解如何在`WPF ...
总的来说,这个示例旨在教会开发者如何在Flex的DataGrid中实现全选功能,并且有效地管理CheckBox的选中状态。通过对DataGrid的自定义,我们可以灵活地扩展和优化这个功能,以满足不同业务需求。同时,了解和掌握这些...
4. **双向绑定**:为了确保Datagrid的数据源和复选框的状态同步,我们可以使用双向数据绑定。这意味着当复选框状态改变时,数据源也会相应更新,反之亦然。 ```mxml <mx:CheckBox id="myCheckbox" selected="{data....
### Flex DataGrid Checkbox 全选/反选知识点详解 #### 一、概述 Flex DataGrid 控件是Adobe Flex框架中的一个重要组成部分,它提供了一个灵活的方式来展示数据列表,并且支持多种功能,如排序、分组、筛选等。在...
本文将详细讨论如何在Flex DataGrid中实现全选和反选功能,并结合`checkBox`来优化这一过程。 首先,我们要理解DataGrid的结构。DataGrid由多个列组成,每一列可能包含不同类型的控件,如文本、图像或复选框。在...
另一个部分是每个数据行中的CheckBox,它们的选中状态应与全选CheckBox保持同步。以下是如何实现这个功能的关键步骤: 1. **创建CheckBox**: 首先,你需要在`DataGrid`或`AdvancedDataGrid`的头部分添加一个...
"Flex Datagrid全选功能"是指在Datagrid中实现一个功能,让用户能够一键选择所有行,这在处理大量数据时非常有用。下面我们将详细探讨如何在Flex中实现Datagrid的全选功能。 1. **Datagrid组件**: Datagrid是Adobe ...
总的来说,实现Flex DataGrid标题栏添加复选框并使其与数据行的复选框联动,涉及到自定义HeaderRenderer和CellRenderer,以及对数据源和事件处理的深入理解。这需要开发者具备良好的Flex编程基础和组件定制能力。...
项目中用到DataGrid, 需要在第一列添加checkbox, 可以多选、全选。 其中涉及的概念DataTemplate, DataGridCellStyle, DataGridCellControlTemplate,Binding, OnPropertyChanged等。
最后,别忘了在窗体的加载事件或其他适当的地方填充`DataGridView`的数据源,确保数据的正确显示。 通过以上步骤,我们就成功地在`Winform DataGridView`的表头添加了一个`CheckBox`,实现了全选/全不选的功能。...
以下是三种实现Checkbox全选和反选的方法,以及它们的JavaScript和Java实现细节。 ### 方法一:使用`checked`属性 **JavaScript实现**: 在JavaScript中,可以通过获取全选按钮的`checked`属性来控制所有复选框的...
对于Datagrid,我们可以将数据源绑定到ArrayCollection或XMLListCollection等可迭代对象上。这样,无论是在初始化还是运行时改变数据源,Datagrid都会实时反映出数据的变化。 实现动态绑定数据源的步骤如下: 1. ...
在这个例子中,我们假设数据源是一个ObservableCollection,其中每个对象都有一个名为`Name`的属性(显示文本)和一个名为`IsSelected`的布尔属性(表示CheckBox的状态)。 为了实现全选功能,我们需要监听全选...
- `Main.mxml`: 主应用文件,创建DataGrid实例,设置数据源和itemRenderer,并绑定事件监听器。 6. **优化和性能考虑** - 使用位运算存储选中状态:当数据量较大时,使用位运算存储选中状态比数组更高效,因为位...