Flex AdvancedDataGrid listItems странное поведение - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть следующий XML, то есть поставщик данных (в виде иерархических данных) Advanced DataGrid:

public var reqData:XML = <root>
  <Requirement ID="REQ-GEN-0.1" title="exigence gen 1" description="blabla 01" testable="true"/>
  <RequirementSet ID="GUI REQ">
    <Requirement ID="REQ-GUI-1.1" title="exigence ihm 1" description="blabla 11" testable="true"/>
    <Requirement ID="REQ-GUI-1.2" title="exigence ihm 2" description="blabla 12" testable="false"/>
  </RequirementSet>
  <RequirementSet ID="PERF REQ">
    <Requirement ID="REQ-PERF-2.1" title="exigence perf 1" description="blabla 21" testable="true"/>
    <Requirement ID="REQ-PERF-2.2" title="exigence perf 2" description="blabla 22" testable="false"/>
    <Requirement ID="REQ-PERF-2.3" title="exigence perf 3" description="blabla 23" testable="true"/>
    <Requirement ID="REQ-PERF-2.4" title="exigence perf 4" description="blabla 24" testable="false"/>
    <Requirement ID="REQ-PERF-2.5" title="exigence perf 5" description="blabla 25" testable="false"/>
    <Requirement ID="REQ-PERF-2.6" title="exigence perf 6" description="blabla 26" testable="false"/>
  </RequirementSet>
  <RequirementSet ID="BUS REQ">
    <RequirementSet ID="BUS 1 REQ">
      <Requirement ID="REQ-BUS-3.1.1" title="exigence bus 1" description="blabla 311" testable="false"/>
      <Requirement ID="REQ-BUS-3.1.2" title="exigence bus 2" description="blabla 312" testable="true"/>
    </RequirementSet>
    <RequirementSet ID="BUS 2 REQ">
      <Requirement ID="REQ-BUS-3.2.1" title="exigence bus3" description="blabla 321" testable="true"/>
    </RequirementSet>
    <RequirementSet ID="BUS 3 REQ"/>
    <RequirementSet ID="BUS 4 REQ">
        <Requirement ID="REQ-BUS-3.4.1" title="exigence bus4" description="blabla 341" testable="false"/>
    </RequirementSet>
    <RequirementSet ID="BUS 5 REQ"/>
    <RequirementSet ID="BUS 6 REQ"/>
  </RequirementSet>
</root>;

А вот часть AdvancedDataGrid:

<mx:AdvancedDataGrid id="reqADGtest" displayItemsExpanded="true"
                                             width="95%" height="75%" horizontalCenter="0" 
                                             contentBackgroundAlpha="0.0" chromeColor="0xdbeaff"
                                             openDuration="500" dragEnabled="true" dropEnabled="true"
                                             dragMoveEnabled="true" editable="true"
                                             variableRowHeight="true" horizontalScrollPolicy="auto">
                <mx:columns>
                    <mx:AdvancedDataGridColumn dataField="@ID" headerText="ID"/>
                    <mx:AdvancedDataGridColumn dataField="@title" headerText="Titre"/>
                    <mx:AdvancedDataGridColumn dataField="@testable" headerText="Testable"/>
                    <mx:AdvancedDataGridColumn dataField="@description" headerText="Description"
                                                           editorUsesEnterKey="true"
                                                           wordWrap="true"/>
                </mx:columns>
            </mx:AdvancedDataGrid>

Проблемав том, что когда я смотрю на длину listItems в AdvancedDataGrid, при создании создается 19, а затем 16, что совершенно неверно (22 элемента).Я хочу получить доступ к некоторым предметам, и я не могу, что действительно раздражает.Это ошибка или что-то в этом роде?

ПРИМЕЧАНИЕ:

Для доступа к элементам по rowIndex и columnIndex я делаю следующее:

var advancedDataGridListData:AdvancedDataGridListData = 
                IDropInListItemRenderer(listItems[event.rowIndex][event.columnIndex]).listData 
                as AdvancedDataGridListData;

IHierarchicalCollectionView(dataProvider).getChildren(
                advancedDataGridListData.item)

РЕДАКТИРОВАНИЕ 23/02/2012

Я проверил ваше решение с помощью event.item, но, к сожалению, этот элемент всегда был нулевым, и я не понял, почему.Поэтому я посмотрел глубже в исходный код AdvancedDataGridBaseEx и обнаружил, что это часть исходного кода Adobe):

// send event to create the new one
        var advancedDataGridEvent:AdvancedDataGridEvent =
            new AdvancedDataGridEvent(AdvancedDataGridEvent.ITEM_EDIT_BEGINNING, false, true);
        // ITEM_EDIT events are cancelable
        advancedDataGridEvent.columnIndex = columnIndex;
        advancedDataGridEvent.dataField = _columns[columnIndex].dataField;
        advancedDataGridEvent.rowIndex = rowIndex;
        dispatchEvent(advancedDataGridEvent);

Вы можете видеть, что event.item никогда не заполняется !!!!Спасибо, Adobe ... Я попробую ваше другое решение, а затем предоставлю вам обратную связь.

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ

Я решил свою проблему, используя в своей пользовательской таблице данных:

var xmlNode:XML = this.selectedItem as XML;

1 Ответ

0 голосов
/ 22 февраля 2012

Как насчет этого

dataProvider.getChildren (event.item)

основываясь на прочтении здесь: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/AdvancedDataGridBaseEx.html#event:itemEditBeginning

В качестве альтернативы, возможно, этот метод поможет (хотя он защищен, поэтому вам может потребоваться выполнить «обезьянье исправление», чтобы изменить модификатор контроля доступа с защищенного на общедоступный:

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/AdvancedDataGridBaseEx.html#absoluteToVisibleIndices()

Я думаю, что для event.rowIndex и event.columnIndex это, по сути, дает вам абсолютные значения, но в listItems оно основано на том, что в данный момент отображается, а не на абсолютных позициях. Не знаю прямого ответа, но здесь уже очень поздно.

...