2012-01-24 2 views
1

У меня есть mx: Datagrid в witch Я бы хотел добавить combobox в качестве средства рендеринга элементов.Flex mx: DataGrid - Создать combobox ItemRenderer

<mx:DataGrid id="dgEnsActes" 
          horizontalScrollPolicy="on" 
          dataProvider="{arListeDevis}" 
          width="100%" height="100%" > 
        <mx:columns> 
         <mx:DataGridColumn dataField="dvIndex" headerText="" headerStyleName="dgHeader" fontWeight="normal" width="40"/> 
         <mx:DataGridColumn dataField="dvLibelle" headerText="Libellé" headerStyleName="dgHeader" wordWrap="true" fontWeight="normal" width="180"/> 
         <mx:DataGridColumn dataField="dvTotal" headerText="Total" headerStyleName="dgHeader" width="60" fontWeight="normal"/> 
         <mx:DataGridColumn dataField="dvStatut" headerText="Statut" 
              rendererIsEditor="true" editorDataField="result" itemRenderer="fr.inters.ui.itemRenderer.irComboEtatDevis" 
              wordWrap="true" headerStyleName="dgHeader" fontWeight="normal" width="70"/> 
         <mx:DataGridColumn dataField="dvAcceptDirect" headerText="Création" headerStyleName="dgHeader" width="60" fontWeight="normal"/> 

        </mx:columns> 

       </mx:DataGrid> 

Мой пользовательский элемент рендерер как то:

<?xml version="1.0" encoding="utf-8"?> 
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:mx="library://ns.adobe.com/flex/mx" 
          focusEnabled="true"> 


    <fx:Script> 
     <![CDATA[ 
      public var result:String=""; 
      [Bindable] var dpValue:Array=[ 
       {label:"Accepté", data:"Accepté"}, 
       {label:"Refusé", data: "Refusé"}, 
       {label:"En attente", data: "En attente"}]; 


      override public function set data(value:Object):void 
      { 
       super.data = value; 
       if (value != null) 
       { 
        var currentValue:String = value.size; 
        var len:int = dpValue.length; 
        for (var i:int = 0; i < len; i++) 
        { 
         if (dpValue[i].data == currentValue) 
         { 
          editor.selectedIndex = i; 
          break; 
         } 
        } 
       } 
      } 

      public function onChange():void 
      { 
       var index:int = editor.selectedIndex; 
       result = dpValue[index].data; 
      } 


     ]]> 
    </fx:Script> 
    <mx:ComboBox id="editor" dataProvider="{dpValue}" width="130" change="onChange()"/> 

</s:MXDataGridItemRenderer> 

Но когда я пытаюсь отладки появляется ошибка, сообщение selectedIndex is undefined

ли кто-нибудь мне помочь?

Благодаря

ответ

2

Почему бы вам не использовать выпадающий без элемента сетки визуализатора?

взглянуть на этот образец в http://blog.flexmp.com/2008/02/18/simple-datagrid-combobox-as-item-editor-example/

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"> 
     <mx:XML id="xml" source="weather.xml"/> 
     <mx:DataGrid id="myDatagrid" dataProvider="{xml.city}" 
       variableRowHeight="true" editable="true" rowHeight="50" 
       width="300" height="300"> 
       <mx:columns> 
       <mx:DataGridColumn dataField="Location"/> 
       <mx:DataGridColumn dataField="Climate" editable="true" editorDataField="value"> 
         <mx:itemEditor> 
           <mx:Component> 
             <mx:ComboBox editable="true"> 
               <mx:dataProvider> 
                 <mx:String>Mild</mx:String> 
                 <mx:String>Hot</mx:String> 
                 <mx:String>Foggy</mx:String> 
                 <mx:String>Rainy</mx:String> 
                 <mx:String>Snow</mx:String> 
               </mx:dataProvider> 
             </mx:ComboBox> 
           </mx:Component> 
         </mx:itemEditor> 
       </mx:DataGridColumn> 
       <mx:DataGridColumn dataField="CloudCoverPercent" editable="true" editorDataField="value" 
         itemEditor="CloudCover"/> 
     </mx:columns> 
     </mx:DataGrid> 
</mx:Application> 
+0

Спасибо Редактор этого пункта работает хорошо, но знаете ли вы, как сделать то же самое с itemrenderer. Действительно, в моем случае Если я изменяю itemEditor на itemrenderer, появляется ошибка/ – Flex60460

+0

Можете ли вы изменить editible = "false" и использовать его только для отображения? посмотрите на http://www.adobe.com/devnet/flex/videotraining/exercises/ex4_05.html для получения дополнительных идей. Я могу вернуться к вам позже, когда я вернусь домой, чтобы посмотреть на код, который я написал, используя itemrenderers. – ShaunOReilly

+0

Если вы установите true, это нормально. Но на datagrid мы показываем ярлык, а не combobox. спасибо – Flex60460

Смежные вопросы