У меня есть следующий XML, то есть DataProvider (как Hierarchicaldata) из Advanced DataGrid:Flex AdvancedDataGrid ListItems странное поведение
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)
EDITED 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 ... Я попробую другое решение, тогда я дам вам отзывы.
ПОСЛЕДНИЙ EDIT
Я решил свою проблему с помощью в моей пользовательской DataGrid:
var xmlNode:XML = this.selectedItem as XML;
Я в замешательстве ... разве вы не смотрите на dataProvider, я считаю, что listItems отслеживает рендереры, которые динамически создаются и перерабатываются, следовательно, изменяя счет (если вы масштабируете приложение, чтобы привлечь вас, вы должны увидеть еще меньшее число в списке. Я считаю). – shaunhusain
Проблема в том, что я должен получить доступ к элементам rowIndex и columnIndex. У меня есть событие ITEM_EDIT_BEGINNING, и я хочу фильтровать элементы, которые можно редактировать.Это событие просто возвращает RowIndex и ColumnIndex, и я подумал, что это способ доступа к элементам: вар advancedDataGridListData:. AdvancedDataGridListData = \t \t \t \t IDropInListItemRenderer (ListItems [event.rowIndex] [event.columnIndex]) ListData \t \t \t \t как AdvancedDataGridListData; – TheFrenchGuy
Эта часть должна работать нормально, вы получаете ссылки на нулевые объекты при использовании этого кода или вы просто беспокоитесь об изменении размера listItems? Для итерации по всей коллекции просто используйте dataProvider или dataProvider.source; dataProvider должен оставаться согласованным в отношении длины, кроме того, если применяется функция filterFunction. listItems будет меняться в зависимости от того, что отображается на экране (и нескольких дополнительных экстраординарных рендерингов, которые сделаны, чтобы в основном дать ему некоторое представление вперед, чтобы строки сразу же были готовы для отображения заранее). – shaunhusain