![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Oct 2007
Сообщений: 66
|
Есть DataGrid, Combobox и InputText поле и один источник данных в виде XML пришедшего из WebService как ПРАВЕЛЬНО организовать работу контролов над источником данных, что бы при выборе в DataGrid данные отражались Combobox и наоборот а также занасились в InputText а при заполнении InputText добавлялось поле в источник данных?
|
|
|||||
|
Использовать Data Binding, заносить при получении данных в экземпляр ICollectionView (в случае XML'ника это XMLListCollection) и прописывать у контролов необходимые сеттеры и обработку событий change.
|
|
|||||
|
Регистрация: Oct 2007
Сообщений: 66
|
Binding это конечно хорошо а как следить за курсором ICollectionView ?
что бы при его изменении все контролы перемещались по источнику данных на текущую запись |
|
|||||
|
Следить за перемещением курсора можно подписавшись на сообщение mx.events.FlexEvent.CURSOR_UPDATE. Большинство методы курсора "can be used as the source for data binding" - поэтому их можно использовать при биндинге, задав обработчикам соответствующие свойства.
Только не понятно какая конечная цель? Зачем следить за курсором ICollectionView? |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 66
|
Что бы знать где мы находимся сечас на источнике данных...
а можно примерчик какойн и будь? |
|
|||||
|
"Где мы находимся на источнике данных" - не совсем понятно что имеется ввиду. Для выбора какого-то элемента в источнике данных используются какие-то инструменты (DataGird, ComboBox etc.) - соотвественно при выборе меняется значение переменной в которой хранится выбранный элемент:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Script>
<![CDATA[
private var _currentData:XML
[Bindable]
public function get currentData():XML
{
return _currentData
}
public function set currentData(value:XML):void
{
_currentData=value
}
]]>
</mx:Script>
<mx:XMLList id="dataProvider" xmlns="">
<data name="Anton" content="man"/>
<data name="Sergey" content="man"/>
<data name="Jane" content="worman"/>
</mx:XMLList>
<mx:Panel width="100%"
height="100%"
headerHeight="10"
paddingBottom="10"
paddingLeft="10"
paddingRight="10"
paddingTop="10">
<mx:VBox width="100%" height="100%">
<mx:HDividedBox width="100%" height="100%">
<mx:VBox width="100%" height="100%">
<mx:DataGrid id="dataGrid" dataProvider="{dataProvider}" change="{currentData = (dataGrid.selectedItem as XML)}" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn headerText="Name" dataField="@name"/>
<mx:DataGridColumn headerText="Content" dataField="@content"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
<mx:VBox width="100%" height="100%">
<mx:HBox width="100%">
<mx:Label text="Name:" width="80"/>
<mx:TextArea id="nameTextArea" enabled="{(currentData == null)? false : true}" change="{currentData.@name = nameTextArea.text}" text="{currentData.@name}" width="100%"/>
</mx:HBox>
<mx:HBox width="100%" height="100%">
<mx:Label text="Content:" width="80"/>
<mx:TextArea id="contentTextArea" width="100%" enabled="{(currentData == null)? false : true}" text="{currentData.@content}" change="{currentData.@content = contentTextArea.text}" height="100%"/>
</mx:HBox>
</mx:VBox>
</mx:HDividedBox>
</mx:VBox>
</mx:Panel>
</mx:Application>
|
|
|||||
|
Регистрация: Oct 2007
Сообщений: 66
|
Прошу прощения но пример у вас не рабочий я немного его подправил:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Script>
<![CDATA[
[Bindable]
private var _currentData:XML
public function get currentData():XML
{
return _currentData
}
public function set currentData(value:XML):void
{
_currentData=value
}
]]>
</mx:Script>
<mx:XMLList id="dataProvider" xmlns="">
<data name="Anton" content="man"/>
<data name="Sergey" content="man"/>
<data name="Jane" content="worman"/>
</mx:XMLList>
<mx:Panel width="100%"
height="100%"
headerHeight="10"
paddingBottom="10"
paddingLeft="10"
paddingRight="10"
paddingTop="10">
<mx:VBox width="100%" height="100%">
<mx:HDividedBox width="100%" height="100%">
<mx:VBox width="100%" height="100%">
<mx:DataGrid id="dataGrid" dataProvider="{dataProvider}" change="{_currentData = (dataGrid.selectedItem as XML)}" width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn headerText="Name" dataField="@name"/>
<mx:DataGridColumn headerText="Content" dataField="@content"/>
</mx:columns>
</mx:DataGrid>
</mx:VBox>
<mx:VBox width="100%" height="100%">
<mx:HBox width="100%">
<mx:Label text="Name:" width="80"/>
<mx:TextArea id="nameTextArea" enabled="{(_currentData == null)? false : true}" change="{_currentData.@name = nameTextArea.text}" text="{_currentData.@name}" width="100%"/>
</mx:HBox>
<mx:HBox width="100%" height="100%">
<mx:Label text="Content:" width="80"/>
<mx:TextArea id="contentTextArea" width="100%" enabled="{(_currentData == null)? false : true}" text="{_currentData.@content}" change="{_currentData.@content = contentTextArea.text}" height="100%"/>
</mx:HBox>
</mx:VBox>
</mx:HDividedBox>
</mx:VBox>
</mx:Panel>
</mx:Application>
|
|
|||||
|
Вполне рабочий
Возможно у вас более старая версия билдера (код написан на beta 2) [Bindable] свойство установлено имено для get метода currentData, а не для приватной переменной _currentData. |
|
|||||
|
Регистрация: Oct 2007
Сообщений: 66
|
Возможно...
|
|
|||||
|
Регистрация: Nov 2006
Сообщений: 134
|
Что-то мне тема напоминает вопрос типа "Как сделать так, чтоб было как обычно делают в интерфейсах к БД, написанных на Delphi"...
![]() Ну да ладно. Можно конечно решить через биндинг, а можно и настроить листенеры на таблицу и контролы - тогда будешь контролировать процесс полностью. |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:34. |
|
|
« Предыдущая тема | Следующая тема » |
|
|