在表格的操作中,经常有这种需求:某一列用来做选择,在标题上的有全选功能。
看下示例
代码如下:
Application:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<s:layout>
<s:VerticalLayout paddingTop="5" paddingBottom="5" paddingLeft="5" paddingRight="5" gap="5"
horizontalAlign="center" verticalAlign="middle"/>
</s:layout>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
import vos.TestVO;
[Bindable]
private var dp:ArrayCollection;
private function createData():void
{
dp = new ArrayCollection();
for (var i:int = 0; i < 10; i++)
{
var t:TestVO = new TestVO();
t.id = String(i);
t.label = "label" + i;
t.icon = "assets/icons/" + i + ".png";
t.selected = (Math.random() > .5) ? true : false;
dp.addItem(t);
}
}
private function deleteData():void
{
for (var i:int = dp.length - 1; i >= 0; i--)
{
var t:TestVO = dp.getItemAt(i) as TestVO;
if(t.selected)
dp.removeItemAt(i);
}
}
public function selectAll(event:MouseEvent):void
{
var cb:mx.controls.CheckBox = event.currentTarget as mx.controls.CheckBox;
if(!dp)
{
//还没数据的时候,你就别选中了,没用
cb.selected = false;
return;
}
for each (var t:TestVO in dp)
{
t.selected = cb.selected;
}
}
]]>
</fx:Script>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<mx:DataGrid id="dg" width="400" height="300" dataProvider="{dp}">
<mx:columns>
<mx:DataGridColumn width="20" sortable="false">
<mx:headerRenderer>
<fx:Component>
<mx:CheckBox click="outerDocument.selectAll(event)"/>
</fx:Component>
</mx:headerRenderer>
<mx:itemRenderer>
<fx:Component>
<mx:CheckBox selected="@{data.selected}"/>
</fx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn dataField="label"/>
<mx:DataGridColumn dataField="icon"/>
</mx:columns>
</mx:DataGrid>
<s:HGroup>
<s:Button label="create data" click="createData()"/>
<s:Button label="delete selected data" click="deleteData()"/>
</s:HGroup>
</s:Application>
TestVO:
package vos
{
[Bindable]
public class TestVO
{
public function TestVO()
{
}
public var id:String;
public var label:String;
public var icon:String;
[Transient]
public var selected:Boolean = false;
}
}
几个可能有疑问的地方:
- selected="@{data.selected}" "@"的作用是双向绑定,当data.selected改变时,checkbox的selected也随之改变,反之亦然。
- [Transient] 作用是指定接下来的字段在序列化的时候可以忽略。比如与后台交互的时候,后台vo不需要selected这个字段,加上它就行了(不加可能会导致警告)。
- 例子里的CheckBox没有居中,如果要让它居中可以给它包上一个居中的容器。
分享到:
相关推荐
成功的实现了,datagrid中嵌套checkbox实现全选的功能。分享代码供大家分享。项目为flex3。
在DataGrid中实现了 简单的全选与非全选。
NULL 博文链接:https://taomujian.iteye.com/blog/294748
项目中用到DataGrid, 需要在第一列添加checkbox, 可以多选、全选。 其中涉及的概念DataTemplate, DataGridCellStyle, DataGridCellControlTemplate,Binding, OnPropertyChanged等。
winform DataGridView表头带CheckBox全选;winform DataGridView表头带CheckBox全选
NULL 博文链接:https://yunzhongxia.iteye.com/blog/652902
flex Datagrid checkbox全选 Datagrid
Datagridview控件没有全选或取消全选的复选框,本资源用VB2015通过扩展DataGridViewColumnHeaderCell类,在列头绘制一个复选框checkbox控件,通过定义checkbox鼠标单击事件来实现行的全选或取消全选。checkbox还可以...
NULL 博文链接:https://dazhi4java.iteye.com/blog/1849623
NULL 博文链接:https://tony0101.iteye.com/blog/579404
NULL 博文链接:https://yunzhongxia.iteye.com/blog/1145400
WPF中DataGrid里面的Checkbox实现单选关键代码, 文档里面的代码复制粘贴即可实现!本人也是项目需要写的一个功能11行代码实现此功能! 希望可以帮助到你们!
最近懒 想在网上找个DataGrid ColumnHeader里面添加CheckBox全选,但是网上没找到,于是就自己写了一个这样的样式,具体功能实现你们就自己去写吧。 分享给大家。 有什么问题可以直接加WPF/Silverlight 找晴天就...
WPF 实现CheckBox全选、反选功能,界面简单实用,功能代码可以很好地套用到自己的项目,希望对有需要的小伙伴有帮助。
对DataGrid控件 增删改 全选 操作 详细说明用法 请看我的博客
wpf 下DataGrid表头包含checkbox,实现多选功能,wpf 下DataGrid表头包含checkbox,实现多选功能
在DataGrid中进行复选框的操作(全选和取消)
主要写了一个全选列,功能包括设置选择框的默认选择状态, 默认可用状态, 全选以及快速获取选中的值,呵呵!
最经典的datagrid全选/反选控件,自定义渲染类,带有使用说明。如果不明白可随时联系