Как объединить ячейки в DataGrid / AdvancedDataGrid в Adobe Flex - PullRequest
5 голосов
/ 02 августа 2011

Мне нужно объединить ячейки, как показано на рисунке:

enter image description here

1 Ответ

3 голосов
/ 02 августа 2011

Flex (в моем понимании) напрямую этого не обеспечивает.У вас есть несколько вариантов.

В любом случае вам может потребоваться упорядочить данные в иерархической модели.(Родитель с 3 детьми, по-видимому, описывает ваш вопрос)

Первый вариант, который я вижу, предполагает непосредственное объявление ваших данных как иерархических по отношению к расширенной таблице данных.Если вы ищете иерархическую расширенную таблицу данных, вы сможете найти учебники в Интернете.

В качестве альтернативы вы можете захотеть всегда показывать данные, а не только при расширении родительского элемента.В этом случае вам все равно понадобится иерархическая модель, но вам нужно будет создать пользовательский обработчик элементов, способный представлять все дочерние данные для одного родительского объекта.(для приведенного вами примера будет работать элемент с тремя метками в VBox / VGroup)

Если это не поможет, или вы хотели бы получить более подробную информацию о том или ином решении, не стесняйтесьспросите в комментарии.

EDIT ::

В качестве примера разносчика предметов, вот источник подобного разносчика предметов, который я использовал.(моя заполняет только две метки, но вы сможете расширить ее, если поймете, что она делает)

<VBox xmlns:mx="http://www.adobe.com/2006/mxml" 
    implements="mx.controls.listClasses.IDropInListItemRenderer"
    width="100%" height="100%" 
    verticalGap="0" paddingTop="5" paddingBottom="5" 
    horizontalScrollPolicy="off"
    horizontalAlign="center">

    <mx:Script>
        <![CDATA[
            import mx.controls.Label;
            import mx.controls.dataGridClasses.DataGridListData;
            import mx.controls.listClasses.BaseListData;

            private var _listData:BaseListData;

            [Bindable("dataChange")]

            // Define the getter method.
            public function get listData():BaseListData
            {
                return _listData;
            }
            // Define the setter method,
            public function set listData(value:BaseListData):void
            {
                _listData = value;
            }

        override public function set data(value:Object):void
        {
            removeAllChildren();

            if (value != null)
            {
                var myListData:DataGridListData = DataGridListData(listData);

                var lLabel1:Label = new Label();
                var lLabel2:Label = new Label();


                lLabel1.text = value[myListData.dataField][0];
                lLabel1.percentWidth = 0;
                addChild(lLabel1);

                lLabel2.text = value[myListData.dataField][1];
                lLabel2.percentWidth = 0;
                addChild(lLabel2);
            }

        } 
        ]]>
    </mx:Script>
</VBox>

Я удалил много проприетарного кода, так что если он неНе имеет никакого смысла, дайте мне знать.

Это предназначено для многократного использования, отсюда значение [myListData.dataField], но если вы хотите, вы можете легко сделать его более конкретным, определив поля самостоятельно.Этот конкретный код ожидает данные в следующем формате, например:

value[field][0] = "text1";
value[field][1] = "text2";

Объект имеет:

var field:Array = [];

field[0] = "text1";
field[1] = "text2";
...