このページの上部にあるコードで提供されるカスタム DataGrid サブクラスを使用しています。
http://blogs.adobe.com/aharui/2008/02/checkbox_selection_in_datagrid.html
VB.NET Web サービスから引き出された 2 列の DataRows の ArrayCollection を効果的に提供しています。列の 1 つは「isSelected」と呼ばれ、「True」または「False」に設定され、チェックボックスで表される唯一の列です。少なくともisSelectedの値に応じて、コードを入力してチェックボックスをチェックおよびチェック解除できるようにしたいことを除いて、すべてが完璧に進んでいます。私のコードは、これらのチェックボックスからすべてをうまく読み取り、ユーザーはそれらをうまく設定できます。DataGrid コンポーネントが非常に隠され、操作がわかりにくいため、コード自体で特定のチェックボックスを選択または選択解除するように設定する方法をまだ見つけていません。
これどうやってやるの?ありがとう!
編集:現時点でのレンダラーのコードは次のとおりです。
package
{
import flash.display.DisplayObject;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.text.TextField;
import mx.controls.Alert;
import mx.controls.CheckBox;
import mx.controls.dataGridClasses.DataGridListData;
import mx.controls.listClasses.ListBase;
/**
* The Renderer.
*/
public class CheckBoxRenderer extends CheckBox
{
private var _data:*;
private var selectedSet:Boolean;
override public function set data(value:Object):void {
var newSelected:*;
//so we don't have to rewrite the label stuff
super.data=value;
_data = value;
if (listData && listData is DataGridListData && DataGridListData(listData).dataField != null)
{
newSelected = _data[DataGridListData(listData).dataField];
}
else if (listData)
{
if (selectedField)
newSelected = _data[selectedField];
}
else
{
newSelected = _data;
}
if (newSelected !== undefined)
{
/*if (newSelected is XMLList) {
newSelected = newSelected[0];
selected = (newSelected == 'true' ? true : false);
} else {
selected = newSelected as Boolean;
}*/
selected = (newSelected == "True" ? true : false);
}
}
public function CheckBoxRenderer()
{
focusEnabled = false;
}
/* override public function set data(value:Object):void
{
super.data = value;
invalidateProperties();
}*/
override protected function commitProperties():void
{
super.commitProperties();
if (owner is ListBase)
selected = ListBase(owner).isItemSelected(data);
}
/* eat keyboard events, the underlying list will handle them */
override protected function keyDownHandler(event:KeyboardEvent):void
{
}
/* eat keyboard events, the underlying list will handle them */
override protected function keyUpHandler(event:KeyboardEvent):void
{
}
/* eat mouse events, the underlying list will handle them */
override protected function clickHandler(event:MouseEvent):void
{
}
/* center the checkbox if we're in a datagrid */
override protected function updateDisplayList(w:Number, h:Number):void
{
super.updateDisplayList(w, h);
if (listData is DataGridListData)
{
var n:int = numChildren;
for (var i:int = 0; i < n; i++)
{
var c:DisplayObject = getChildAt(i);
if (!(c is TextField))
{
c.x = (w - c.width) / 2;
c.y = 0;
}
}
}
}
}
}
チェックボックスの選択されたフィールドは正しいものに設定されていますが、選択されたフィールドがtrueに設定されたときにチェックされているように視覚的に表示されません。他に何が欠けていますか?