Просмотр полной версии : Как понять, какие CheckBox выделены?!
kirillmana
09.08.2007, 18:14
Есть список операторов, которые в DataGrid'е. Все поля, кроме первого, заполняются данными из XML, полученного от сервиса.
В первом столбце - CheckBox.
Выбираем операторов с помощью CheckBox и после (например) нажатия какой-нибудь кнопки, необходимо получить массив операторов, которые выбраны.
Я догадываюсь, как делать, если обрабатывать каждое выделение. А можно ли получить сразу весь массив?!
<mx:DataGrid id="dg" bottom="40" left="10" right="10" top="66">
<mx:columns>
<mx:DataGridColumn headerText=" " dataField="isSelect" editable="true" rendererIsEditor="true" itemRenderer="mx.controls.CheckBox" editorDataField="selected" width="1"/>
<mx:DataGridColumn headerText="УК" dataField="uk" width="10"/>
<mx:DataGridColumn headerText="Л/С" dataField="paccount" width="10"/>
<mx:DataGridColumn headerText="КРС" dataField="krs" width="10"/>
<mx:DataGridColumn headerText="Оператор" dataField="name_op" width="30"/>
<mx:DataGridColumn headerText="Уров. присоед" dataField="link_level" width="10"/>
</mx:columns>
</mx:DataGrid>
При изменении нажатии checkBox'a меняется значение в dataProvider'e (если itemRenderer написан правильно). При нажатии кнопку, все выделенные элементы легко получить с помощью примерно такой выборки (примерный код):
var dataProvider:XMLList=(dataGrid.dataProvider as XMLListCollection).sourse
var selectedItems:XMLList=dataProvider.(@isSelect == "true")
kirillmana
10.08.2007, 09:58
На самом деле, не получается, потому что (как я уже писал), все колонки кроме первой заполняются из полученного XML. В XML'е я получаю информацию об операторах.
И, вытаскивая dataProvider,
var dataProvider:XMLList=(dataGrid.dataProvider as XMLListCollection).sourse
я получаю тот же самый XML, который задавал на входе и столбца isSelect там нет.
kirillmana
10.08.2007, 11:22
Все, как вариант можно при получении XML делать
myXML = XML(myLoader.data);
var item:XML;
var isSelect:XML = <isSelect>false</isSelect>
for each(item in myXML.children()){
item.appendChild(isSelect);
}
dg.dataProvider = myXML.children();
Sneg, там только единственно не dataProvider.(@isSelect == "true"), а dataProvider.(isSelect == "true") - это же элемент, а не атрибут
Формат dataProvider'a входящих данных ты не дал - потому и предположил что это атрибут :)
kirillmana
10.08.2007, 12:21
Только сейчас побочный глюк, не понятно от чего...:eek:
<mx:DataGrid id="dg" bottom="40" left="10" right="10" top="66" editable="true">
<mx:columns>
<mx:DataGridColumn headerText=" " dataField="isSelect" editable="true" rendererIsEditor="true" itemRenderer="mx.controls.CheckBox" editorDataField="selected" width="1"/>
<mx:DataGridColumn headerText="УК" dataField="uk" width="10" editable="false"/>
<mx:DataGridColumn headerText="Л/С" dataField="paccount" width="10" editable="false"/>
</mx:columns>
</mx:DataGrid>
Кликаю на CheckBox в первой строчке - стал выделенным (selected), потом во второй - второй CheckBox выделяется, а выделение с первого CheckBox убирается. Т.е. нельзя как бы выбрать сразу несколько выделенных CheckBox. "Навыделял" я так несколько CheckBox, потом на жимаю на кнопку
var dataPr:XMLList = (dg.dataProvider as XMLListCollection).source;
var selectedItems:XMLList = dataPr.(isSelect=="true");
var item:XML;
for each (item in selectedItems){
trace(item.uk);
}
и у меня убирается выделение и с последнего выделенного CheckBox. Может я какое-то свойство не так поставил.
Но самое интересное, что trace выдает все те строки, которые я как бы выделел, но не видно, что они выделены.:boredom:
Не видно - потомучто возможно ты в itemRenderer'e не переписал метод
set data (data:Object):void почитай в хелпе - там есть подобный пример.
kirillmana почему ты отказываешься пользоваться поиском? или ты думаешь что при средней гениальности флешеров ты самый гениальный и только ты придумал использовать чекбоксы в айтем рендерах?
Лично я давал тут пример http://www.flasher.ru/forum/showthread.php?t=91950
чтобы его найти я потратил 5 кликов мыши и 8 нажатий на кнопоки клавиатуры (ввод слова comboBox)
+ я могу найти легким движением руки еще несколько примеров применения комбобокса в айтем рендерах в интернете.
ты уже неделю паришься с этими рендерами, неужели тяжело потратить целый день на изучение, а потом за 5 минут долететь?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.