Вход

Просмотр полной версии : CheckBox в DataGrid


BeDLiNt
14.10.2008, 13:33
Использую кастомный итемрендерер для колонки в DataGrid-е RendererDGCheckBox.mxml :<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="40"
implements="mx.controls.listClasses.IDropInListItemRenderer">
<mx:CheckBox verticalCenter="0" horizontalCenter="0" scaleX="2" scaleY="2"
selected="{data[DataGridListData(listData).dataField]=='true' ? true:false}"/>
<mx:Script>
<![CDATA[
import mx.controls.listClasses.BaseListData;
import mx.controls.DataGrid;
import mx.controls.Alert;

import mx.controls.dataGridClasses.DataGridListData;

private var _listData:BaseListData = null;

[Bindable(event="dataChange")]
public function get listData():BaseListData {
return _listData;
}

public function set listData (value:BaseListData):void {
_listData = value;
}

]]>
</mx:Script>
</mx:Canvas>
Галочки ставятся, однако изменений в провайдере (XMLList) конечно же не происходит. Как грамотнее релизовать это?

sangle
15.10.2008, 17:50
Для этих целей рекомендую всегда переопределять свойство data

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%">
<mx:Script>
<![CDATA[

override public function set data(value: Object): void {
if(value != null) {
super.data = value;
checkBox.selected = value.checked;
}
}

private function onChange(event: Event): void {
super.data.checked = checkBox.selected;
}

]]>
</mx:Script>
<mx:CheckBox id="checkBox" change="onChange(event)"/>
</mx:Canvas>

sangle
15.10.2008, 18:40
Если же тебе нужно более универсальное решение (в отличие от предыдущего решения, где было известно, что значение хранится в свойстве checked), то вот расширенный пример.

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas
xmlns:mx="http://www.adobe.com/2006/mxml"
implements="mx.controls.listClasses.IDropInListItemRenderer">
<mx:Script>
<![CDATA[
import mx.controls.dataGridClasses.DataGridListData;
import mx.controls.listClasses.BaseListData;

override public function set data(value: Object): void {
if(value != null) {
super.data = value;
var fieldName: String = DataGridListData(listData).dataField;
checkBox.selected = value[fieldName];
}
}

private var _listData:BaseListData = null;

[Bindable(event="dataChange")]
public function get listData():BaseListData {
return _listData;
}

public function set listData (value:BaseListData):void {
_listData = value;
}

private function onChange(event: Event): void {
var fieldName: String = DataGridListData(listData).dataField;
super.data[fieldName] = checkBox.selected;
}
]]>
</mx:Script>
<mx:CheckBox id="checkBox" change="onChange(event)"/>
</mx:Canvas>

BeDLiNt
16.10.2008, 11:59
Спасиб. Второе то что нужно. Единственно пришлось заменить checkBox.selected = value[fieldName]; наvalue[fieldName]==true ? checkBox.selected=true:checkBox.selected=false; т.к. в XMLList нет типизации.

sangle
16.10.2008, 14:17
А так не читабельнее?

checkBox.selected = value[fieldName]==true;

А вообще бы я использовал значения 0 и 1. Это очень удобно при передаче данных и позволяет не зависеть от коллекции и способах ее наполнения при передаче данных от внешних источников.