Я использую сетку данных с средством визуализации элементов , которое создает кнопку переключения. Идея состоит в том, чтобы иметь список элементов и позволять выбирать только один, а предварительно выбирать один при запуске.
У меня работает выделение одной кнопки, а это означает, что когда я нажимаю на кнопку переключения, остальные отменяются.
Моя задача - создать способ предварительного выбора элемента сетки данных или смоделировать щелчок по строке и выбрать соответствующую кнопку переключения.
Если я использую datagrid.selectedIndex, результатом будет выделение, но кнопка переключения не будет выделена.
Вот пример кода
В этом примере Я использую значение массива "selected", чтобы определить выбранную кнопку , не мое любимое решение, а то, которое сработало первым.
Коллекция массивов:
public static const ValuesList : ArrayCollection = new ArrayCollection(
[
{ID:0, Name:"One", selected:false},
{ID:1, Name:"Two", selected:false},
{ID:2, Name:"Three", selected:false},
{ID:3, Name:"Four", selected:false}
]
);
Сетка данных:
<s:DataGrid id="dataGrid" dataProvider={ValuesList} >
<s:columns>
<s:ArrayList>
<s:GridColumn id="GridCol0" />
<s:GridColumn id="GridCol1" />
<s:GridColumn id="GridCol2" itemRenderer = "detail_ItemRenderer" />
</s:ArrayList>
</s:columns>
</s:DataGrid>
Средство визуализации элементов столбца:
<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
clipAndEnableScrolling="true">
<fx:Script>
<![CDATA[
import mx.events.FlexEvent;
/**
* Creatioon complete event handler to set toggle button content value.
* */
protected function MyToggleButton_creationCompleteHandler(event:FlexEvent) : void
{
MyListToggleButton.label = data.Name;
MyToggleButton.selected = data.selected;
}
/**
* One of the only function that are called on item interaction.
* */
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth,unscaledHeight);
MyToggleButton.selected = data.selected;
}
]]>
</fx:Script>
<s:ToggleButton id="MyToggleButton" width="100%" height="100%"
creationComplete="MyToggleButton_creationCompleteHandler(event)" />
</s:GridItemRenderer>
РЕШЕНИЕ:
Использование массива данных для передачи информации в кнопку Toggle. Установка одного значения в «true» отобразит выбранный элемент.
Для обеспечения целостности данных советую установить для выбранного индекса сетки соответствующий индекс значения, установленного в «true»:
public function SetSelectedIndexByName() : int
{
for (var i : int=0; i < dataGrid.dataProvider.length ; i++)
{
if (dataGrid.dataProvider[i].toString().toUpperCase() == "TRUE")
{
return i;
}
}
return -1;
}