2015-05-06 2 views
0

У меня есть datagrid в flex с itemrenderer и dataprovider.Flex update dataprovider после datagrid отредактировал

Проблема заключается в том, что когда я редактирую datagrid, поставщик не обновляется с измененным значением.

Вот мой datagrid:

<?xml version="1.0" encoding="utf-8"?> 
    <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" borderColor="#FFFFFF" cornerRadius="0"> 
     <mx:Script> 
      <![CDATA[ 
       import mx.core.Application; 
       [Bindable] 
       private var provider:ArrayCollection = new ArrayCollection([ 
       {data:'1'}, 
       {data:'2"}]); 
      ]]> 
     </mx:Script> 

<!-- Here is the data grid , the provider is groupeCollection, ihave set editable to true--> 
      <mx:DataGrid id="myGrid" width="100%" height="80%" 
       dataProvider="{provider}" x="0" editable="true" > 
       <mx:columns> 
        <mx:DataGridColumn dataField="data" > 
         <mx:itemRenderer> 
          <mx:Component> 
           <mx:NumericStepper minimum="1" maximum="10000" /> 
          </mx:Component> 
         </mx:itemRenderer> 
        </mx:DataGridColumn> 
       </mx:columns> 
      </mx:DataGrid> 
    </mx:Canvas> 

Теперь после редактирования ячейки (dataFiel="data") и печать dataprovider, ничего не меняет в нем.

+0

Какую версию Flex вы используете? Когда я пытаюсь запустить его в FB 4.7 с помощью Flex 4.14, ваш код сработает. – Brian

+0

Также проверьте документы на двунаправленных привязках. Это мое лучшее предположение для чего-то, что поможет на этом этапе. – Brian

+0

i use Flex 3 @Brian –

ответ

1

Не использовали Flex 3, так долго, но вы можете сразу проверить, что ли ItemRenderer поддерживает boolean свойство rendererIsEditor? Если да, то установите его на true, тогда ваш рендерер также будет работать как редактор.

EDIT: Я попробовал ваш код сейчас, и, похоже, некоторая ошибка компилятора с разделением элементов в ArrayCollection. Кажется, вы смешиваете " и ' для предметов. Я скорректировал его и теперь проверил его в приведенном ниже примере, который работает. Вы можете нажать кнопку для проверки до и после сценариев. Я вставляю полный код для вашего удобства, просто вставляя и запускаю:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600"> 

    <mx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 
      protected function button1_clickHandler(event:MouseEvent):void 
      { 
       for(var i:int = 0; i<provider.length; i++) { 
        Alert.show(provider.getItemAt(i).data); 
       } 
      } 
     ]]> 
    </mx:Script> 
    <mx:VBox width="100%" height="100%"> 
     <mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" borderColor="#FFFFFF" cornerRadius="0"> 
      <mx:Script> 
       <![CDATA[ 
        import mx.collections.ArrayCollection; 
        import mx.core.Application; 
        [Bindable] 
        private var provider:ArrayCollection = new ArrayCollection([ 
         {data:'1'}, 
         {data:'2'}]); 

       ]]> 
      </mx:Script> 

      <!-- Here is the data grid , the provider is groupeCollection, ihave set editable to true--> 
      <mx:DataGrid id="myGrid" width="100%" height="80%" 
         dataProvider="{provider}" x="0" editable="true" > 
       <mx:columns> 
        <mx:DataGridColumn dataField="data" > 
         <mx:itemRenderer> 
          <mx:Component> 
           <mx:NumericStepper minimum="1" maximum="10000" /> 
          </mx:Component> 
         </mx:itemRenderer> 
        </mx:DataGridColumn> 
       </mx:columns> 
      </mx:DataGrid> 
     </mx:Canvas> 
     <mx:Button label="Check DP" click="button1_clickHandler(event)"/> 
    </mx:VBox> 
</mx:Application> 
+0

Я добавил это, но все же, когда я изменяю значение в ячейке, он не обновляется в провайдере ... спасибо за то время, которое вы даете моему вопросу. –

+0

Попробуйте это и сообщите мне, если у вас все еще есть проблемы. Я тестировал этот код в своем FB, и он отлично работает. –

+0

Хм-м, действительно, этот пример работает ... все-таки у меня такая же проблема, когда я меняю код «в моем приложении я добавляю данные в datagrid и обновляю его с помощью myGrid.dispatchEvent (новый CollectionEvent (CollectionEvent.COLLECTION_CHANGE)) ; 'тогда, когда я пытаюсь отредактировать, изменения будут отменены" в любом случае я приму ваш ответ, потому что он работает спасибо @ahil_mittal :) –

0

Вы можете использовать itemEditor вместо ItemRenderer, ItemRenderer только показать свои значения, если вы хотите изменить данные во время выполнения, мы установили значение вручную с помощью

data.propertyname = значение;

Попробуйте этот код:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="100%" height="100%" borderColor="#FFFFFF" cornerRadius="0"> 
    <mx:Script> 
     <![CDATA[ 
      import mx.collections.ArrayCollection; 
      import mx.core.Application; 
      [Bindable] 
      private var provider:ArrayCollection = new ArrayCollection([ 
       {data:'1'}, 
       {data:'2'}]); 
     ]]> 
    </mx:Script> 
    <mx:VBox> 
     <!-- Here is the data grid , the provider is groupeCollection, ihave set editable to true--> 
     <mx:DataGrid id="myGrid" width="100%" height="80%" 
        dataProvider="{provider}" x="0" editable="true" > 
      <mx:columns> 
       <mx:DataGridColumn dataField="data" editorDataField="value"> 
        <mx:itemEditor> 
         <mx:Component> 
          <mx:NumericStepper minimum="1" maximum="10000" /> 
         </mx:Component> 
        </mx:itemEditor> 
       </mx:DataGridColumn> 
      </mx:columns> 
     </mx:DataGrid> 

     <mx:DataGrid width="100%" height="80%" 
        dataProvider="{provider}" x="0" editable="true" > 
      <mx:columns> 
       <mx:DataGridColumn dataField="data" > 
        <mx:itemRenderer> 
         <mx:Component> 
          <mx:NumericStepper minimum="1" maximum="10000" /> 
         </mx:Component> 
        </mx:itemRenderer> 
       </mx:DataGridColumn> 
      </mx:columns> 
     </mx:DataGrid> 
    </mx:VBox> 
</mx:Canvas> 
Смежные вопросы