`
taomujian
  • 浏览: 110880 次
  • 性别: Icon_minigender_1
  • 来自: 安徽-合肥
社区版块
存档分类
最新评论

在DataGrid中使用CheckBox,实现全选功能

    博客分类:
  • FLEX
阅读更多

 

项目需要写了一个带CheckBox的DataGridColumn,在网上找了几个例子都不行,于是就参照着自己写了一个。本来是考虑在组件中使用一个属性或者用一个类来保存每一行CheckBox选中的属性,但是发现如果拉动滚动条的化就会出现已选择和为选择的行的“选中状态”变的混乱等等一些情况,后来发现这是因为DataGrid在拉动滚动条时会去动态的设置新显行的数据,而由于只初始化了一定数量的行,因此DataGrid会将新显示行的数据设置到因为滚动而不显示的行对象中,这样通过改变数据的方式来改变每行显示的数据,而这是我保存在行对象中CheckBox的属性也都会被重新设置,也就出现了混乱的情况,现在采用数据源来保存选中的状态该问题得以解决,但是该方法要求在数据源里新增加一个属性,始终觉的还是不太好,希望能有更好点的又不太复杂的方法能够解决此问题

 

/**

* 在DataGrid中使用显示CheckBox列的组件,该组件会保存用户选中的数据当前行的引用,

* 该组件要求在数据源中存在属性dgSelected属性,此属性用来记录当前行是否被选中

* 2008-12-15

* */

package org.puremvc.as3.demos.flex.weborb.commPkg.components.checkBoxColumn

{

import mx.controls.DataGrid;

import mx.controls.dataGridClasses.DataGridColumn;

import mx.controls.listClasses.ListData;

 

public class CheckBoxColumn extends DataGridColumn{

 

public var cloumnSelected:Boolean=false;//保存该列是否全选的属性(用户先点击全选后在手动的取消几行数据的选中状态时,这里的状态不会改变)

 

 

public var selectItems:Array = new Array();//用户保存用户选中的数据

 

public function CheckBoxColumn(columnName:String=null){

super(columnName);

}

 

}

}

 

/**

* 显示CheckBox列组件的列标题,点击时会将整个数据源中的数据全部选中,反之全不选

* 2008-12-15

* */

package org.puremvc.as3.demos.flex.weborb.commPkg.components.checkBoxColumn

{

import flash.events.Event;

 

import mx.collections.ArrayCollection;

import mx.controls.CheckBox;

import mx.controls.DataGrid;

 

public class CheckBoxHeaderRenderer extends CheckBox{  

 

private var _data:CheckBoxColumn;//定义CheckBox列对象

 

public function CheckBoxHeaderRenderer(){

super();

this.addEventListener(Event.CHANGE,onChange);//CheckBox状态变化时触发此事件

this.label = "全选";

}

 

 

override public function get data():Object{

return _data;//返回的是CheckBox列的对象

 

}

 

override public function set data(value:Object):void{

_data = value as CheckBoxColumn;

trace(_data.cloumnSelected);

selected = _data.cloumnSelected;

}

 

private function onChange(event:Event):void{

 

 

 

 

 

var dg:DataGrid = DataGrid(listData.owner);//获取DataGrid对象

var column:CheckBoxColumn = dg.columns[listData.columnIndex];//获取整列的显示对象

 

var dgDataArr:ArrayCollection = dg.dataProvider as  ArrayCollection;

 

column.cloumnSelected = this.selected;//更改列的全选状态

 

column.selectItems = new Array();//重新初始化用于保存选中列的对象

 

if(this.selected){//如果为全部选中的化就将数据源赋值给column.selectItems,不是就不管他,上一步已经初始化为空

column.selectItems = (dg.dataProvider as ArrayCollection).toArray();

 

}

 

 

 

 

for(var i:int = 0; i < dgDataArr.length ; i++){

Object(dgDataArr[i]).dgSelected = this.selected;//更改没一行的选中状态

}

}

}

}

 

/**

* 显示CheckBox列组件中每一行显示的ItemRenderer,用于在每一行前面添加一个CheckBox组件,

* 用户选择后会将该行数据添加到CheckBoxColumn组件中的数组中保存

* 2008-12-15

* */

package org.puremvc.as3.demos.flex.weborb.commPkg.components.checkBoxColumn

{

import flash.events.Event;

import flash.events.MouseEvent;

 

import mx.controls.CheckBox;

import mx.controls.DataGrid;

 

public class CheckBoxItemRenderer extends CheckBox{

 

private var currentData:Object; //保存当前一行值的对象

 

public function CheckBoxItemRenderer(){

super();

this.addEventListener(Event.CHANGE,onClickCheckBox);

}

 

override public function set data(value:Object):void{

this.selected = value.dgSelected;

 

this.currentData = value; //保存整行的引用

}

 

//点击check box时,根据状况向selectedItems array中添加当前行的引用,或者从array中移除

private function onClickCheckBox(e:Event):void{

 

 

 

var dg:DataGrid = DataGrid(listData.owner);//获取DataGrid对象

 

var column:CheckBoxColumn = dg.columns[listData.columnIndex];//获取整列的显示对象

 

var selectItems:Array = column.selectItems;

 

this.currentData.dgSelected = this.selected;//根据是否选中的状态,更改数据源中选中的标记

 

if(this.selected){

selectItems.push(this.currentData);

}else{

for(var i:int = 0; i<selectItems.length; i++){

if(selectItems[i] == this.currentData){

selectItems.splice(i,1)

}

}

}

}

}

}

 

<mx:DataGrid id="dg" height="100%" width="100%" rowCount="5" dataProvider="{busiOperData}" fontSize="12">

<mx:columns>

<checkBoxColumn:CheckBoxColumn  headerText="" width="20" textAlign="center" sortable="false"

itemRenderer="{new ClassFactory(CheckBoxItemRenderer)}"

headerRenderer="{new ClassFactory(CheckBoxHeaderRenderer)}">

 

</checkBoxColumn:CheckBoxColumn>

 

 

 

<mx:DataGridColumn dataField="name" headerText="操作名称"/>

<mx:DataGridColumn dataField="real" headerText="操作实现"/>

<mx:DataGridColumn dataField="realType" headerText="实现类型"/>

<mx:DataGridColumn dataField="useScope" headerText="使用范围"/>

<mx:DataGridColumn dataField="depict" headerText="说明"/>

</mx:columns>

</mx:DataGrid>

分享到:
评论
3 楼 taomujian 2009-01-16  
你好,那个代码测试过是可以的;要想获得全选的数据,在checkBoxColumn列里有个selectItems属性可以获取到你选择的所有行的数据
2 楼 taomujian 2009-01-04  
你好,我在文中增加了一个例子,希望能方便你使用
1 楼 yegucheng 2008-12-31  
我用上面的代码,全选功能怎么不管用啊??   如果我想得到当前选中的所有行的记录,怎么取啊?要遍历datagrid里的所有数据吗?

相关推荐

    WPF在dataGrid中添加CheckBox支持单选,多选,全选功能

    项目中用到DataGrid, 需要在第一列添加checkbox, 可以多选、全选。 其中涉及的概念DataTemplate, DataGridCellStyle, DataGridCellControlTemplate,Binding, OnPropertyChanged等。

    flex在DataGrid中实现checkbox全选或取消

    在博文《flex在DataGrid中实现checkbox全选或取消》中,作者可能详细讲解了以下步骤: 1. 创建DataGrid,并绑定数据源。 2. 添加一个CheckBox组件,作为全选/取消全选的控制。 3. 实现CheckBox的change事件监听,...

    flex datagrid 嵌套checkbox实现全选

    本示例关注的是在DataGrid中嵌套复选框(Checkbox),并实现全选功能。这在需要用户批量选择或操作数据的场景中非常常见。以下是对这个主题的详细讲解: 1. **Flex DataGrid组件**: Flex DataGrid是Adobe Flex...

    WPF-DataGrid中CheckBox实现全选与非全选

    在实际应用中,我们经常需要在`DataGrid`中添加复选框(CheckBox)来实现行级别的选择功能,同时提供全选和非全选的功能。这个功能不仅方便用户批量操作,也为应用提供了更好的交互性。本教程将详细讲解如何在`WPF ...

    DataGrid和AdvancedDataGrid CheckBox全选功能

    在本文中,我们将深入探讨两种在Flex或Adobe AIR应用程序中常用的组件——`DataGrid`和`AdvancedDataGrid`,特别是关于它们的CheckBox全选功能。`DataGrid`和`AdvancedDataGrid`是Flex中用于展示数据集合的强大工具...

    flex Datagrid checkbox全选

    在Flex开发中,Datagrid是一种常用的组件,用于展示表格数据,而checkbox全选功能则是提高用户体验的一个重要特性。本文将详细讲解如何实现Flex Datagrid中checkbox的全选功能。 首先,我们要了解Flex Datagrid的...

    DataGrid和AdvancedDataGrid CheckBox全选功能1.1

    在本文中,我们将深入探讨如何在Flex中实现DataGrid和AdvancedDataGrid组件的CheckBox全选功能。这个功能在数据展示和交互式操作中非常常见,它允许用户通过一个主CheckBox来选择或取消选择所有行数据。 首先,我们...

    Flex中DataGrid内嵌CheckBox的全选反选和防止选择状态错乱实现方法

    本文将详细探讨如何在Flex的DataGrid中实现CheckBox的全选和反选功能,以及如何防止选择状态错乱的问题。 首先,我们需要创建一个自定义的DataGrid列类,这个类将扩展mx.controls.gridClasses.GridColumn,并且包含...

    winform DataGridView表头带CheckBox全选

    在这个特定的场景中,我们关注的是如何在`DataGridView`的表头添加一个`CheckBox`,以便实现全选和全不选的功能。这将大大提升用户体验,使得用户可以快速地对所有行进行操作,如批量删除、更新等。 首先,我们需要...

    三种方式实现checkbox全选,反选

    全选和反选功能在多选列表中尤其常见,例如在批量操作或者多条件筛选时。以下是三种实现Checkbox全选和反选的方法,以及它们的JavaScript和Java实现细节。 ### 方法一:使用`checked`属性 **JavaScript实现**: 在...

    Flex DataGrid CheckBox 一个简单的全选

    总的来说,这个示例旨在教会开发者如何在Flex的DataGrid中实现全选功能,并且有效地管理CheckBox的选中状态。通过对DataGrid的自定义,我们可以灵活地扩展和优化这个功能,以满足不同业务需求。同时,了解和掌握这些...

    VB.NET为DataGridView添加CheckBox实现全选全不选复选框

    Datagridview控件没有全选或取消全选的复选框,本资源用VB2015通过扩展DataGridViewColumnHeaderCell类,在列头绘制一个复选框checkbox控件,通过定义checkbox鼠标单击事件来实现行的全选或取消全选。checkbox还可以...

    easyui checkbox +全选

    标题 "easyui checkbox +全选" 指的是在网页界面设计中使用 EasyUI 框架实现复选框(checkbox)以及全选功能。EasyUI 是一个基于 jQuery 的前端框架,它提供了一系列预定义的 CSS 样式和 JavaScript 组件,帮助...

    DataGridView标头CheckBox全选反选

    这个功能在数据管理界面中十分常见,例如在批量处理或选择多个项目时。 首先,我们需要理解`DataGridView`的基本结构和工作原理。`DataGridView`由多行多列组成,每一行可以包含多个单元格,每个单元格可以有不同的...

    WPF CheckBox全选、反选比较通用

    本教程将详细介绍如何在WPF中实现CheckBox的全选和反选功能。 首先,我们需要理解CheckBox的基本用法。在XAML中,我们可以创建一个CheckBox并为其设置文本和初始状态: ```xml &lt;CheckBox Content="全选" x:Name=...

    在DataGrid中进行复选框的操作(全选和取消)

    在.NET框架中,`DataGrid`控件是一个用于展示数据表格的强大工具,它允许用户以交互方式查看和编辑数据。...通过以上步骤,你可以在`DataGrid`中实现复选框的全选和取消功能,提供更丰富的用户交互体验。

    Flex_全选或取消DataGrid中的checkbox

    根据给定的信息,本文将详细解释如何在Flex中实现DataGrid中的checkbox全选或取消功能。这涉及到Flex的checkbox管理、事件监听与处理、以及如何使用Cairngorm框架进行模型层更新等内容。 ### 一、理解Flex DataGrid...

    向dataGrid中添加checkBox

    本教程将深入探讨如何在DataGrid中添加复选框(checkBox),以实现多选、单选和全选功能。这对于用户交互和数据操作来说是非常实用的,比如在表格中进行批量选择或过滤。 首先,我们需要了解DataGrid的基本结构。...

Global site tag (gtag.js) - Google Analytics