在使用RadioButton 作为DataGrid的ItemRender的时候,当数据过多滚动条出现的时候,那么在滚动条滚动的时候,上一次选中的行的选中状态会丢失。当前选中的行是不确定的。导致选中状态丢失的原因是多条数据公用一个ItemRender。比如在一个DataGride中有100条数据,列表每次最多显示5条,那么在绘制组件的时候Flex只会创建6或者7个ItemRender对象,其中的5个供5条数据使用,另外的1个或者2个只是为了性能方面考虑而创建。
当你在滚动滚条时候,会调用RadioButton的set data() 方法,用另外的业务数据来填充着RadioButton。
比如五条数据d1-d5,五个ItemRender i1-i5,初始化的时候是一一对应的,但当你下拉滚动条,显示d2-d6条数据的时候此时并不会重新创建一个ItemRender供d6使用,而是循环起来让他用i1的,详细的说明在下面的链接http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html。
下面的代码RadioBtnItemRender继承RadioButton,重写onChange和set data,以实现状态不丢,下面代码只是在setData的时候动态的增加一个字段_selectedFlag从而避免对业务模型的约束。
package utils.itemrender
{
import flash.events.Event;
import flash.events.MouseEvent;
import mx.collections.ArrayCollection;
import mx.controls.Button;
import mx.controls.DataGrid;
import mx.controls.RadioButton;
public class RadioBtnItemRender extends RadioButton
{
public static const NAME:String="radioButtonGroup";
public static const FIELD:String="_selectedFlag";
private static var _firstFlag:Boolean=true;
private var _clickFunction:Function;
public function set clickFunction(_clickFunction:Function):void
{
this._clickFunction=_clickFunction;
this.addEventListener(MouseEvent.CLICK, this._clickFunction);
}
public function get clickFunction():Function
{
return this._clickFunction;
}
public function RadioBtnItemRender():void
{
super();
this.groupName=NAME;
this.addEventListener(Event.CHANGE, onChange);
}
private function onChange(event:Event):void
{
var dg:DataGrid = this.owner as DataGrid;
var collection:ArrayCollection = dg.dataProvider as ArrayCollection;
for each(var d:Object in collection){
d.selectedFlag = false;
}
this.data.selectedFlag=this.selected;
}
override public function set data(value:Object):void
{
// if(_firstFlag){
// value.selectedFlag = true;
// }
// _firstFlag = false;
if (value.hasOwnProperty("selectedFlag"))
{
this.selected=value.selectedFlag;
}
else
{
value.selectedFlag = false;
this.selected=false;
}
super.data=value;
}
}
}
在mxml文件中可以这样用:
<mx:DataGridColumn headerText="yourText" itemRenderer="{new ClassFactory(message.utils.RadioBtnItemRender)}"/>
分享到:
相关推荐
VC 获取RadioButton控件选中值,在平时的使用中,选中的RadioButton会有一个值传递到下一个环节中,本实例就是展示了如何获取用户选中的值。下面请看具体代码: void CDemoDlg::OnTest() { //获得组中单选...
两个radioButton选中其中一个弹出选中的值对话框,也可用在数据库如(男或女)
在项目中遇到buttonGroup下的3个radioButton在选中后,不能恢复初始的全不选状态。经过CSDN论坛陈年椰子的指点,实现了该功能。 特做了演示工程,实际测试可用。贡献给同样有困惑的同学。 本工程的模块版本如下: ...
Android进阶之RadioButton选中值的获取、单选多行,解决很多选中去不掉色的效果
RadioButton实现选择后可取消选择,利用wpf技术实现
使用xml文件实现RadioButton的不同选择状态,展示不同显示效果的功能。
开发语言C#,开发环境.net,控制控件RadioButton进行美化。
tableWidget里面嵌入多个radiobutton并判断其状态
Javascript获取被选中的Radio button的值或者文本。
最近写项目有个需求是单选框必须改成设计要的样子,然后再网上找了好久,自己调试了一下,就好了
获取RadioButton选中值第一种方式通过RadioGroup的setOnCheckedChangeListener()来监听选中哪一个单选按钮// 通过R
使用RadioButton切换Fragment,滑动切换的时候有动画
本资源项目,对于eclipse和Android studio两种开发...2.可以点击radiobutton 改变选中状态,进行切换fragment。 3.由于用了viewpager,也可以左右滑动。 4.代码完整,注释清晰,导入即用。 5.用好了请给个评价,谢谢!
一个非常好的示例,值得一看
C#的winform是没有webform的RadioButtonList和CheckBoxList这两个...要实现从数据库取出数据后动态生成N个RadioButton和CheckBox并获取选中项目的值,请看本例。思路很简单,有问题请指出,相互学习共同进步,谢谢。
android 自定义RadioButton的样式android 自定义RadioButton的样式
嵌套的在GridView里的radiobutton 怎么才能只选中一个_asp_net(c#)
在工作中遇到了这样一个问题,就是在同一界面下放了多个RadioButton来进行双向绑定,但是经过绑定后,在修改对象值后,发现数据和界面不同步的问题。然后在网上找了一些资料很多解决办法不好。用来很长时间找到的...
Radiobutton流式自动换行