Назначение массива объектов в DataGrid - PullRequest
0 голосов
/ 24 августа 2009

Если dataProvider для DataGrid представляет собой массив объектов, как мне установить для dataField каждого столбца свойство объекта.

У меня есть ArrayCollection (скажем, а), где каждый элемент является объектом Например a[i] = data:Object Где данные объекта имеют некоторые свойства - data.name, data.title, data.content и т. Д.

У меня есть DataGrid, в котором я хочу отобразить эти данные.

Итак, я положил:

<mx:DataGrid id="entries" dataProvider="{resultRSS}">
  <mx:columns>
<mx:Array>
  <mx:DataGridColumn headerText="Title" dataField="data.title"/>
  <mx:DataGridColumn headerText="Date" dataField="data.created"/>
</mx:Array> 
  </mx:columns>
</mx:DataGrid>

Это, похоже, не работает вообще. Я получаю пустой DataGrid. Как назначить свойство dataField, чтобы оно правильно отображалось? Я тоже пробовал {data.title}.

Спасибо.

Редактировать: образец моих данных

-[]arraycollection
--[0]
----id="id1"
----data.
------title="something"
------name="something"
------text="some html"
--[1]
----id="id2"
----data.
------title="something2"
------name="something2"
------text="some html2"

и таблица должна быть

 |title     |name      |text     |
 =================================
 |something |something |some html|
 |something2|something2|somehtml2|

1 Ответ

2 голосов
/ 24 августа 2009

вот ваш ответ

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="initialize()">

<mx:Script>
    <![CDATA[
        import mx.collections.HierarchicalData;

        var a:Array = new Array();
        var o:Object = {};
        private function initialize():void{
          o["text"]="hello";
                  o["desc"]="Rahul";
          a.push(o);
        }

    ]]>
</mx:Script>


    <mx:AdvancedDataGrid width="100%" height="100%" sortExpertMode="true" id="adg1" designViewDataType="tree" dataProvider="{new HierarchicalData(a)}">
        <mx:columns>
            <mx:AdvancedDataGridColumn headerText="text" dataField="text"/>
            <mx:AdvancedDataGridColumn headerText="desc" dataField="desc"/>
        </mx:columns>
    </mx:AdvancedDataGrid>

</mx:Application>

edit - окей, теперь откажитесь от моего предыдущего ответа согласно вашим данным, попробуйте это

var a:Array = new Array();
        var o:Object = {};      
        private function stringArrayToObjectArray():void{
            o["id"]="mauj";
            var oj:Object=new Object();
            oj["title"]="aaa";
            o["data"]=oj;

            var oj1:Object=new Object();
            oj1["id"]="mauj2";
            var oj2:Object=new Object();
            oj2["title"]="qqqq";
            oj1["data"]=oj2;


            a.push(o);      
            a.push(oj1);        
        }

         private function some_labelFunc(item:Object,th:Object):String {
                return item.data.title;
            }

    ]]>
</mx:Script>



    <mx:AdvancedDataGrid  width="100%" height="100%" sortExpertMode="true" id="adg1" dataProvider="{a}">
        <mx:columns>
            <mx:AdvancedDataGridColumn headerText="COMPANIES" dataField="data" labelFunction="some_labelFunc"/>
        </mx:columns>
    </mx:AdvancedDataGrid>

</mx:Application>

попробуйте извините за такой плохой код

...