重写了DataGrid,主要是为了得到DataGrid的listItems属性,listItems保存了当前现显示的每一行的信息,还用了个ArrayCollection保存被选中了行的信息。
MyDataGrid.as
package flex.components.checkdatagrid
{
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.controls.DataGrid;
public class MyDataGrid extends DataGrid
{
protected var arrColl:ArrayCollection = null; //保存被选中的信息
public function MyDataGrid()
{
super();
arrColl = new ArrayCollection();
}
//方法名不该取这个的
public function get listRendererArray():Array{
return listItems;
}
//add
public function addToSelected(item:Object):void{
if(arrColl.getItemIndex(item)<0)
{
arrColl.addItem(item);
}
}
//del
public function delFromSelected(item:Object):void{
if(arrColl.getItemIndex(item)>-1)
{
arrColl.removeItemAt(arrColl.getItemIndex(item));
}
}
//isIn
public function isInSelected(item:Object):Boolean{
if(arrColl.getItemIndex(item)<0)
{
return false;
}
else
{
return true;
}
}
public function getSelected():ArrayCollection{
return arrColl;
}
}
}
CheckHeadBoxIR.as 实现全选用的checkbox
package flex.components.checkdatagrid
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.text.TextField;
import mx.controls.CheckBox;
import mx.controls.DataGrid;
import mx.events.DataGridEvent;
public class CheckHeadBoxIR extends CheckBox
{
public function CheckHeadBoxIR(){
super();
this.addEventListener(Event.CHANGE, cgHandler);
}
override public function set data(value:Object) : void{
//super.data = value; //一定不要有这句
this.selected = false;
DataGrid(listData.owner).addEventListener(DataGridEvent.HEADER_RELEASE, sortEventHandler);
}
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{
//得到DataGrid里的listItems
var listItems:Array = MyDataGrid(listData.owner).listRendererArray;
if(listItems.length>0)
{
for(var i:Number=0; i<listItems.length; i++)
{
if(listItems[i].length>0)
{
if(listItems[i][0].selected != this.selected)
{
listItems[i][0].selected = this.selected;
listItems[i][0].dispatchEvent(new Event(Event.CHANGE));
}
}
}
}
/*var ii:Object = dataGrid.indexToItemRenderer(2).data;*/
}
}
}
CheckBoxIR.as
package flex.components.checkdatagrid
{
import flash.display.DisplayObject;
import flash.events.Event;
import flash.text.TextField;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.controls.CheckBox;
public class CheckBoxIR extends CheckBox{
public function CheckBoxIR(){
super();
this.addEventListener(Event.CHANGE, cgHandler);
}
override public function set data(value:Object) : void{
super.data = value;
if(MyDataGrid(listData.owner).isInSelected(data.id))
{
this.selected = true;
}
else
{
this.selected = false;
}
// Alert.show("int set data--"+data.@id);
}
//居中显示
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{
var dg:MyDataGrid = MyDataGrid(listData.owner);
if(this.selected == true)
{
dg.addToSelected(data.id);
}
else
{
dg.delFromSelected(data.id);
}
}
}
}
应用
<checkdatagrid:MyDataGrid width="100%" borderStyle="outset" height="366"
id="orderInfo" dataProvider="{data}" >
<checkdatagrid:columns>
<mx:DataGridColumn headerRenderer=flex.components.checkdatagrid.CheckHeadBoxIR" itemRenderer="flex.components.checkdatagrid.CheckBoxIR" width="30"/>
</checkdatagrid:columns>
</checkdatagrid:MyDataGrid>
分享到:
相关推荐
本示例关注的是在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编程基础和组件定制能力。...
最后,别忘了在窗体的加载事件或其他适当的地方填充`DataGridView`的数据源,确保数据的正确显示。 通过以上步骤,我们就成功地在`Winform DataGridView`的表头添加了一个`CheckBox`,实现了全选/全不选的功能。...
项目中用到DataGrid, 需要在第一列添加checkbox, 可以多选、全选。 其中涉及的概念DataTemplate, DataGridCellStyle, DataGridCellControlTemplate,Binding, OnPropertyChanged等。
以下是三种实现Checkbox全选和反选的方法,以及它们的JavaScript和Java实现细节。 ### 方法一:使用`checked`属性 **JavaScript实现**: 在JavaScript中,可以通过获取全选按钮的`checked`属性来控制所有复选框的...
在这个例子中,我们假设数据源是一个ObservableCollection,其中每个对象都有一个名为`Name`的属性(显示文本)和一个名为`IsSelected`的布尔属性(表示CheckBox的状态)。 为了实现全选功能,我们需要监听全选...
对于Datagrid,我们可以将数据源绑定到ArrayCollection或XMLListCollection等可迭代对象上。这样,无论是在初始化还是运行时改变数据源,Datagrid都会实时反映出数据的变化。 实现动态绑定数据源的步骤如下: 1. ...
- `Main.mxml`: 主应用文件,创建DataGrid实例,设置数据源和itemRenderer,并绑定事件监听器。 6. **优化和性能考虑** - 使用位运算存储选中状态:当数据量较大时,使用位运算存储选中状态比数组更高效,因为位...